Python:regexp语句切分
在下面的代码中,有一个简单的标记器,可以很好地用于我需要显示它的测试文件:Python:regexp语句切分,python,regex,Python,Regex,在下面的代码中,有一个简单的标记器,可以很好地用于我需要显示它的测试文件: 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 h
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子句,但也不起作用。这里有一个更简单的方法,适用于您给出的示例。如果需要更复杂的正则表达式,可以将其添加回:
import re
mystr = "This house is small. That house is big."
for token in re.findall(r"([\w]+|[^\s])", mystr):
print (token)
if re.match(r"[.!?]", token):
print()
我不太清楚您希望如何处理句子中的标点符号,以及哪个标点符号终止了一个句子,因此可能需要稍加修改。这里有一个更简单的方法,适用于您给出的示例。如果需要更复杂的正则表达式,可以将其添加回:
import re
mystr = "This house is small. That house is big."
for token in re.findall(r"([\w]+|[^\s])", mystr):
print (token)
if re.match(r"[.!?]", token):
print()
我不太清楚您希望如何处理句子中的标点符号,以及哪个标点符号终止了一个句子,因此它可能需要稍微修改。非正则表达式解决方案使用和fromnltk
:
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
.
结合使用和fromnltk
的非正则表达式解决方案:
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
.
是一个开源的句子切分器,在正式的商务英语句子(WSJ文章)上具有最先进的表现。它使用简单的正则表达式作为初始过滤器,然后使用单层感知器处理剩余10%的困难情况。因此,它可以被训练在《华尔街日报》英语以外的领域表现出色
句子边界检测(和分割)是一个积极研究和不断完善的领域。我认为没有一个正则表达式可以可靠地检测句子和句子边界。此外,正则表达式不能很容易地告诉您它们在句子边界中有多“自信”。而且他们不能接受新词汇、语言、方言或写作风格的再培训。我能想到的一些例子会破坏许多正则表达式:
- 是HMTL吗?(拼写?)标记语言
- 这个呢。。。HTML可以进一步标记
- 要点句有时不以任何特殊标点符号结尾
- 引用“这是一个句子吗?”
- 椭圆(“…”)
- 具有特殊含义的Unicode问号和句号
- 人群一遍又一遍地高呼“U.S.A.U.S.A.”
这甚至没有开始涉及各种非正式的英语或外语语法,如克里奥尔语、聊天信息、城市俚语等
英语(或任何自然语言)是一种经验定义的语言(或“历史定义的”),其中语法和标点符号规则取决于人类进行交流的经验。而这种体验历史的“时间窗”是可以根据语境、地理位置、甚至是关于受众/读者的个人“心理理论”进行调整的。甚至孩子们在很小的时候也会发展自己的“秘密”语言。人类根据在特定领域、地理区域等与之交流的人来制定、打破和进化语言规则
因此,句子切分准确度的最新水平也必须是“模糊”的,并且在您的领域(来自“您的世界”的一组培训示例)内根据经验定义(例如机器学习)如果准确性对你很重要。是一个开源的句子切分器,在正式的商务英语句子(WSJ文章)上有着最先进的表现。它使用简单的正则表达式作为初始过滤器,然后使用单层感知器处理剩余10%的困难情况。因此,它可以被训练在《华尔街日报》英语以外的领域表现出色
句子边界检测(和分割)是一个积极研究和不断完善的领域。我认为没有一个正则表达式可以可靠地检测句子和句子边界。此外,正则表达式不能很容易地告诉您它们在句子边界中有多“自信”。而且他们不能接受新词汇、语言、方言或写作风格的再培训。我能想到的一些例子会破坏许多正则表达式:
- 是HMTL吗?(拼写?)标记语言
- 这个呢。。。HTML可以进一步标记
- 要点句有时不以任何特殊标点符号结尾
- 引用“这是一个句子吗?”
- 椭圆(“…”)
- 具有特殊含义的Unicode问号和句号
- 人群一遍又一遍地高呼“U.S.A.U.S.A.”
这甚至没有开始涉及各种非正式的英语或外语语法,如克里奥尔语、聊天信息、城市俚语等
英语(或任何自然语言)是一种经验定义的语言(或“历史定义的”),其中语法和标点符号规则取决于人类进行交流的经验。而这种体验历史的“时间窗”是可以根据语境、地理位置、甚至是关于受众/读者的个人“心理理论”进行调整的。甚至孩子们在很小的时候也会发展自己的“秘密”语言。人类根据在特定领域、地理区域等与之交流的人来制定、打破和进化语言规则
因此,如果准确度对您很重要,那么句子切分的准确度也必须是“模糊”的,并且在您的领域(一组来自“您的世界”的培训示例)内根据经验定义(例如机器学习)。效果很好,谢谢!令人惊讶的是,当在o面前