✂️

bunkai で日本語文章の文分解を行うメモ

2023/09/16に公開

LLM 向けに日本語データセットを web データから構築しようとすると,

日本語が途中で切れていたりすることがあります.
(改行や三点リーダー('...')で複数行になっている)

改行も考慮して文の分解を行いたい...

また, 句点がないものや記号で終わっている文章をうまく文(sentence)単位にしたいことがあります.

bunkai がありました!

https://github.com/megagonlabs/bunkai

使う

lb 版を使います.
機械学習で処理するため, 処理にはすこし時間かかります.

  from bunkai import Bunkai
  from pathlib import Path
  
  bunkai = Bunkai(path_model=Path("bunkai-model-directory"))
  
  text = """
  はい。このようにpythonライブラリと
  しても使えます!
  """
  
  # line separator for Bunkai
  lb_sep = '▁' # (U+2581)
  
  tx = text.replace('\n', lb_sep)
  print(tx)
  
  for sentence in bunkai(tx):
      print("sent", sentence)
▁はい。このようにpythonライブラリと▁しても使えます!▁
sent ▁
sent はい。
sent このようにpythonライブラリと▁しても使えます!
sent ▁

voila!

改行セパレータ文字は分解後も残っているので, 必要に応じて除去するとよいでしょう.

三点リーダー対応

改行文字に replace すればいけるでしょう!
cc100 などは UTF8 一文字ではなく, ドットが3つ ... のようです. 行の末尾に現れるので判定はしやすいでしょう.

不都合

https://github.com/megagonlabs/bunkai/issues/34

のようにカッコなどで改行が意図しないところに入ることがあります.

とりあえずは後処理で対応でしょうか...

Discussion