私は現在、基本的なコーパス データベースを作成し、テキストをトークン化するプロジェクトに取り組んでいます。しかし、私は問題に行き詰まっているようです。これらのものがあると仮定します:
import os, re
texts = []
for i in os.listdir(somedir): # Somedir contains text files which contain very large plain texts.
with open(i, 'r') as f:
texts.append(f.read())
ここで、トークンの前後の単語を見つけたいと思います。
myToken = 'blue'
found = []
for i in texts:
fnd = re.findall('[a-zA-Z0-9]+ %s [a-zA-Z0-9]+|\. %s [a-zA-Z0-9]+|[a-zA-Z0-9]+ %s\.' %(myToken, myToken, myToken), i, re.IGNORECASE|re.UNICODE)
found.extend(fnd)
print myToken
for i in found:
print '\t\t%s' %(i)
トークンが文を開始する、トークンが文を終了する、またはトークンが文のどこかに現れる可能性があるため、上記の正規表現ルールを使用しました。実行すると、次のようなことに出くわします。
blue
My blue car # What I exactly want.
he blue jac # That's not what I want. That must be "the blue jacket."
eir blue phone # Wrong! > their
a blue ali # Wrong! > alien
. Blue is # Okay.
is blue. # Okay.
...
\b\w\b または \b\W\b も試しましたが、残念ながら、間違った結果を返す代わりに結果が返されませんでした。私は試した:
'\b\w\b%s\b[a-zA-Z0-9]+|\.\b%s\b\w\b|\b\w\b%s\.'
'\b\W\b%s\b[a-zA-Z0-9]+|\.\b%s\b\W\b|\b\W\b%s\.'
質問が曖昧すぎないことを願っています。