有一个简单的分词器,它适用于我需要显示它的测试文件,代码如下:
import re, sys
for line in sys.stdin:
for token in re.findall("(\w+\.\w+\.[\w.]*|\w+[-.]\w+|[-]+|'s|[,;:.!?\"%']|\w+)", line.strip()):
print(token)
像这样的文字这所房子很小。那房子很大。正确地变成:
This
house
is
small
.
That
house
is
big
.
但是,我还需要在句子之间插入一个空行:
···
small
.
That
···
所以我又写了一个循环
for token in re.sub("([\"\.!?])\s([\"`]+|[A-Z]+\w*)", "\\1\n\n\\2", line):
使用 regexp 捕获我需要使用的测试文本中几乎所有的断句,但我在实际将它连接到代码时遇到了问题。将它放在第一个 for 循环 中,这对我来说是最合乎逻辑的,但会完全破坏输出。还尝试了一些 if 子句,但这也不起作用。
请您参考如下方法:
使用 sent_tokenize() 组合的非正则表达式解决方案和 word_tokenize()来自 nltk:
from nltk.tokenize import word_tokenize, sent_tokenize
s = "This house is small. That house is big."
for t in sent_tokenize(s):
for word in word_tokenize(t):
print(word)
print
打印:
This
house
is
small
.
That
house
is
big
.
