用于计算文本块中的句子的正则表达式

时间:2010-09-09 15:11:38

标签: php regex nlp

  

可能重复:
  PHP - How to split a paragraph into sentences.

我有一个文本块,我想将其分成句子,这样做的最佳方法是什么?我想找'。','!','?'字符,但我意识到这有一些问题,例如当人们使用首字母缩略词,或者用类似的东西结束句子时!处理这个问题的最佳方法是什么?我认为会有一些正则表达式可以解决这个问题,但如果能更好地解决这个问题,我会对非正则表达式解决方案持开放态度。

3 个答案:

答案 0 :(得分:2)

正则表达式不是解决此问题的最佳解决方案。通过创建解析库,您将获得更好的服务。你可以轻松创建逻辑块来区分一件事与另一件事。您需要提出一系列规则,将文本分解为您希望看到的块。

"Are you sure?" he asked.

使用正则表达式时,这不会搞砸吗?但是,使用解析器,您实际上可以看到

<start quote><capitalization>are you sure<question><end quote>he asked<period>

用简单的规则可以说“那是一句话。”

答案 1 :(得分:1)

不幸的是,由于你说的原因,没有完美的解决方案。如果内容是你可以以某种方式控制或强制每个句子后的指定分隔符,那将是理想的。除此之外,所有你真正能做的就是寻找(\.|!|?)+,甚至可能在之后扔一个\ s,因为大多数人在前一句和下一句之间用1或2个空格填充新句子。

答案 2 :(得分:0)

我认为最大的问题是缩写词可能存在!因此,您必须在JavaDoc摘要语句中使用Prof.&nbsp;Knuth之类的内容,以便javadoc生成器不会认为第一个句子在Prof.之后结束。 这是一个我不知道任何人如何可靠处理的问题。我能想象的唯一近似解决方案是使用缩写词典。