以前、JavaScriptで簡易的に形態素解析をする方法を考えました。
今回はPythonで同じことをやってみました。
品詞を特定するのではなく漢字、カタカナの区切りを利用する方法です。
実は実用的ではありませんでした。メモとして残します。
def bunkatsu(text, words=[]):
# テキストを単語に分割する。
saki = text
# あらかじめ指定した文字列(接続詞など)で分割
for word in words:
saki=saki.replace(word,"\t"+word+"\t")
# 記号で分割
pattern = r"(\s+)"
saki = re.sub(pattern, r"\t", saki)
# 記号で分割
pattern = r"([\s。、.,:;]+)"
saki = re.sub(pattern, r"\t\1\t", saki)
# 英字で分割
pattern = r"([a-zA-Z]+)"
saki = re.sub(pattern, r"\t\1\t", saki)
# カタカナで分割
pattern = r"([\u30A1-\u30FF]+)"
saki = re.sub(pattern, r"\t\1\t", saki)
# 漢字で分割
pattern = r"([\u2E80-\u2FDF\u3005-\u3007\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\U00020000-\U0002EBEF]+)"
saki = re.sub(pattern, r"\t\1\t",saki)
results = saki.split("\t")
temps = []
for temp in results:
if temp != "":
temps.append(temp)
return temps
# テキストを単語に分割する。
saki = text
# あらかじめ指定した文字列(接続詞など)で分割
for word in words:
saki=saki.replace(word,"\t"+word+"\t")
# 記号で分割
pattern = r"(\s+)"
saki = re.sub(pattern, r"\t", saki)
# 記号で分割
pattern = r"([\s。、.,:;]+)"
saki = re.sub(pattern, r"\t\1\t", saki)
# 英字で分割
pattern = r"([a-zA-Z]+)"
saki = re.sub(pattern, r"\t\1\t", saki)
# カタカナで分割
pattern = r"([\u30A1-\u30FF]+)"
saki = re.sub(pattern, r"\t\1\t", saki)
# 漢字で分割
pattern = r"([\u2E80-\u2FDF\u3005-\u3007\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\U00020000-\U0002EBEF]+)"
saki = re.sub(pattern, r"\t\1\t",saki)
results = saki.split("\t")
temps = []
for temp in results:
if temp != "":
temps.append(temp)
return temps
使用方法
text = "ゴーシュは町の活動写真館でセロを弾く係りでした。To Sherlock Holmes she is always the woman. "
words = ["まだ", "だから", "そして", "ところが", "あまり"]
result = bunkatsu(text, words)
print(result)
words = ["まだ", "だから", "そして", "ところが", "あまり"]
result = bunkatsu(text, words)
print(result)
実行結果
[‘ゴーシュ’, ‘は’, ‘町’, ‘の’, ‘活動写真館’, ‘で’, ‘セロ’, ‘を’, ‘弾’, ‘く’, ‘係’, ‘りでした’, ‘。’, ‘To’, ‘Sherlock’, ‘Holmes’, ‘she’, ‘is’, ‘always’, ‘the’, ‘woman’, ‘.’]
コメント