Nlp 如何将文本修剪成一定长度的完整句子?

Nlp 如何将文本修剪成一定长度的完整句子?,nlp,truncate,linguistics,text-manipulation,sentence,Nlp,Truncate,Linguistics,Text Manipulation,Sentence,我正在寻找一种将未知文本修剪到一定长度的解决方案。只保留完整的句子 所以像这样的文本 "Were you born 1. 3. 1987 in Prague? Štěpán Jr. lives there for 3 years now! " 应该变成 "Were you born 1. 3. 1987 in Prague? " 对于字符限制为50、40(和20,带--查找下一个句子结尾) 我读过很多这样的问题——大多数答案都是不同的 substr($text, 0, strrpos('.'

我正在寻找一种将未知文本修剪到一定长度的解决方案。只保留完整的句子

所以像这样的文本

"Were you born 1. 3. 1987 in Prague? Štěpán Jr. lives there for 3 years now! "
应该变成

"Were you born 1. 3. 1987 in Prague? "
对于字符限制为50、40(和20,带--查找下一个句子结尾)

我读过很多这样的问题——大多数答案都是不同的

substr($text, 0, strrpos('.', $text) + 1);
但这显然不适用于上述判决和其他类似判决。其他人建议使用斯坦福文本解析器或OpenNLP。它们确实很酷,但不适用于典型应用。您不会在Ruby/PHP服务器上安装Java,只是为了修剪文本,对吗。所以我正在寻找一些80/20的解决方案,这将是语言无关的,并且能够处理出现的典型案例

我想不出比这更有问题的句子(在下一个句子的开头有一个日期、非点的句子结尾和非ASCII字符,在“极限”句的中间没有结尾的点)。p>
我还创造了一个要点(https://gist.github.com/4051035)对于您来说,使用fork和play-fork可以确保用户可以通过单击找到此问题的不同解决方案,因此请使用它;)我想让这个问题成为comunity wiki,但它似乎不适用于问题——只适用于答案。因此,请在评论中添加任何建议/相关So问题。谢谢。

我解决这个问题的大致思路是检查最后一个句子分隔符(即点空格),检查该位置周围是否有点空格分隔的数字或已知的模式,如果有,请怯懦地选择上一个句子。也许可以计算下一个非数字点空间的位置,如果它处于某个软限制(比如$limit+10),则选择当前句子

如果足够获得80%的精度,则可以应用简单规则:

  • 每个“?”和“!”句号
  • 当你们发现点号时,检查下一个单词是否以大写字母开头,但不是全部以大写字母开头(记住这只适用于80/20规则)
如果您需要更好的,那么我恐怕您需要nlp库。如果您有php/ruby主机,那么您应该能够使用。它是用python编写的,有很好的支持