こんな感じじゃないですかね。
入力ファイル
出力ファイル
csv
1text,result
2私はここにいる,私|は|ここ|に|いる
import csv
import glob
from janome.tokenizer import Tokenizer
t = Tokenizer()
def parser(text):
result = t.tokenize(text)
return "|".join(result)
t = Tokenizer(wakati=True)
path = "./input"
file_list = glob.glob(path + '/' + '*.csv')
for filename in file_list:
with open(filename, "r+", encoding="cp932", errors="ignore") as f:
reader = csv.DictReader(f, delimiter=',')
texts = [dict(text=c["text"], result=parser(c["text"]) ) for c in reader]
f.seek(0)
fieldnames = ['text', 'result']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for row in texts:
writer.writerow(row)
イメージとしては2列目に1列目の分かち書き(,で区切る)を入力できればと思います。
分かち書きの結果を,
で区切るとcsvとして再利用するのに不都合があると思いましたので|
で区切るようにしてます。
また、読み込んだファイルに直接書き戻すのはその後の利用を考えるとあまり良くないと考えます。
別のファイルに出力されることを検討してみてください。
追記: 別ファイルに出力する場合のスクリプトです。
python
1import csv
2import glob
3
4from janome.tokenizer import Tokenizer
5
6t = Tokenizer()
7
8def parser(text):
9 result = t.tokenize(text)
10 return "|".join(result)
11
12
13t = Tokenizer(wakati=True)
14path = "./input"
15file_list = glob.glob(path + '/' + '*.csv')
16
17for filename in file_list:
18 with open(filename, "r+", encoding="utf-8", errors="ignore") as f:
19 reader = csv.DictReader(f, delimiter=',')
20
21 texts = [dict(text=c["text"], result=parser(c["text"]) ) for c in reader]
22
23output = 'output.csv'
24with open(output, 'w') as wf:
25 fieldnames = ['text', 'result']
26 writer = csv.DictWriter(wf, fieldnames=fieldnames)
27
28 writer.writeheader()
29 for row in texts:
30 writer.writerow(row)