【问题标题】:Python: Approaches to parse English sentences: Regex?Python:解析英语句子的方法:正则表达式?
【发布时间】:2015-07-21 23:52:18
【问题描述】:

我必须处理一堆句子(假设是格式良好的英语),例如:

“矮胖子坐在墙上,即矮胖子坐在墙上!然后,他摔倒了。他为什么摔倒?”

我对两件事感兴趣:

  1. 单词(因此忽略逗号、分号等)
  2. 特定句子的终止位置(我认为是 !、? 和 .,但“即”还有更复杂的情况,其中包含点)

鉴于该语句包含诸如“即”之类的词,使用通用正则表达式跳过“\W+”并不能立即使用。

正则表达式是完成上述两件事的好方法吗?如果是的话,有人可以给我指点开始创建这样的正则表达式吗? 或者我应该创建自己的规则来查找句子的结尾吗?

规则示例如下:

如果句子以. 或? 或! 结尾AND 后面有一个空格AND 下一个单词以大写字母开头,那么上一句就结束了。

如果句子中有“John 博士回家了”,则此规则无效。 (. 和 Dr. 中 r 后面的空格后跟大写的“J”错误地表示新句子的开始)

【问题讨论】:

  • 如果是“即”和'博士。约翰”,您可以在设置带有结尾的句子之前制作一组“不结尾”来检查它们。您必须亲自挑选它们。

标签: python regex parsing


【解决方案1】:

您的示例文本结构不正确,因为第一句话在语法上不正确。

你必须使用正则表达式吗?还是您只是在寻找一个好的库来解析文本以查找整个句子?

我会推荐使用 TextBlob 来解析文本。这是一个例子:

from textblob import TextBlob
blob = TextBlob("Humpty dumpty sat on a wall i.e. humpty was sitting on a wall! Then, he fell down. Dr. John (BA in Medical Engineering) helped reconstruct humpty?")
blob.sentences

# [Sentence("Humpty dumpty sat on a wall i.e."),
#  Sentence("humpty was sitting on a wall!"),
#  Sentence("Then, he fell down."),
#  Sentence("Dr. John (BA in Medical Engineering) helped reconstruct humpty?")]

【讨论】:

  • 实际上我只是尝试了 TextBlob,即没有得到正确处理......它假设句子以 i.e. 结尾,这是不正确的
  • 没关系,我收回它,textblob 工作得很好,即后面应该跟一个逗号才能使用正确的英文!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多