Skip to main content
 首页 » 编程设计

Python:正则表达式分句

2025年05月04日72落叶无声

有一个简单的分词器,它适用于我需要显示它的测试文件,代码如下:

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 
.