我目前从事一个项目,该项目只是创建基本的语料库数据库并对文本进行标记。但似乎我陷入了困境。假设我们有这些东西:
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)
我认为会有三种可能性:token 可能开始句子,token 可能结束句子或者 token 可能出现在句子的某个地方,所以我使用了上面的 regex 规则。当我跑步时,我遇到了这些事情:
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\.'
我希望问题不会太模糊。