テキストデータを自然言語処理する際に、会話文を抽出したかったが、テキストデータにおいて、1行に'「」'の対が複数あったり、逆に'「」'の対が複数行にまたがって存在していたりしており、成型がめんどうであった。
「」の対が1要素に収まっているリストを返す関数をメモ代わりに記載する。
# テキストファイルのパス
path = 'hogehoge.txt'
# 「」の対が1要素に収まっているリストを返す関数
def preprocessing(path):
text = []
with open(path, mode='r', encoding='utf-8') as f:
for line in f.readlines():
# text の list の要素に'「', '」'がそれぞれ1つ以下になるよう加工する
line = line.replace('「','\n「')
line = line.replace('」','」\n')
if '\n' in line:
line = line.split('\n')
line = [l for l in line if l != '']
else:
line = [line]
text.extend(line)
# 「」の対が複数要素にまたがっているものを1つの要素に結合する
document = []
counter = 0
stack = []
for line in text:
stack.append(line)
if '「' in line:
counter += 1
if '」' in line:
counter -= 1
if counter == 0:
stack = ''.join(stack)
document.append(stack)
stack = []
return document
おそらくもう少し賢い書き方があるに違いないし、すべての場合に対応可能であるわけでは当然ないけれども、とりあえず目的は達成できたのでよしとする。