你如何解析一段文字到句子?(在Ruby中)

hen*_*y74 22 ruby parsing text split nlp

你如何考虑段落或大量的文本并将其分解为句子(最好使用Ruby),同时考虑到Mr.和Dr.以及USA这样的案例?(假设你只是将句子放入一个数组数组中)

更新:我想到的一个可能的解决方案是使用词性标注器(POST)和分类器来确定句子的结尾:

从琼斯先生那里获取数据时,他走出意大利避暑别墅的阳台,感受到了温暖的阳光.他很高兴活着.

CLASSIFIER先生/ PERSON Jones/PERSON感觉/ O/O温暖/ O太阳/ O开/ O他/ O面/ O as/O他/ O步/ O出/ O到/ O/O阳台/ O/O他/ O夏天/ O家/ O in/O意大利/ LOCATION ./O他/ O是/ O快乐/ O到/ O是/ O活着/ O ./O

POST先生/ NNP Jones/NNP感觉/ VBD/DT温暖/ JJ太阳/ NN on/IN他/ PRP $ face/NN as/IN他/ PRP踩/ VBD输出/ RP上/ IN/DT阳台/ NN /他/ PRP $ summer/NN home/NN in/IN Italy./NNP He/PRP/VBD happy/JJ to/TO be/VB alive./IN

我们可以假设,由于意大利是一个地点,这段时间是句子的有效结束吗?自从"先生"结束 没有其他词性,我们可以假设这不是一个有效的句末期吗?这是我问题的最佳答案吗?

思考?

Sto*_*ken 13

试着看看Stanford Parser周围的Ruby包装器.它有一个getSentencesFromString()函数.

  • 是的,要么通过Ruby包装,要么直接调用edu.stanford.nlp.process.DocumentPreprocessor(来自代码或来自命令行:java edu.stanford.nlp.process.DocumentPreprocessor/u/nlp/data/lexparser/textDocument .txt> oneTokenizedSentencePerLine.txt,你可以将文本分成句子.(这是通过一个(良好但启发式)FSM完成的,所以它很快;你没有运行概率解析器.) (4认同)
  • 顺便说一句,edu.stanford.nlp.process.DocumentPreprocessor (2认同)

Dir*_*mar 8

为了说清楚,没有简单的解决方案.正如谷歌快速搜索所显示的那样,这是NLP研究的主题.

但是,似乎有一些开源项目处理NLP支持句子检测,我发现了以下基于Java的工具集:

openNLP

附加注释:决定句子开始和结束位置的问题在自然语言处理中也称为句子边界消歧(SBD).


小智 5

看看NLTK(自然语言工具包)中的Python句子分割器:

Punkt句子标记器

它基于以下论文:

Kiss,Tibor和Strunk,Jan(2006):无监督多语言句子边界检测. 计算语言学 32:485-525.

本文的方法非常有趣.它们将句子分裂的问题减少到确定单词与跟随标点符号相关联的强度的问题.缩写后的句点超载是大多数模糊句点的原因,因此如果您可以识别缩写,则可以高概率地识别句子边界.

我已经非正式地测试了这个工具,它似乎可以为各种(人类)语言提供良好的结果.

将它移植到Ruby将是非常重要的,但它可能会给你一些想法.


aan*_*tix 5

看起来这个红宝石宝石可能会成功.

https://github.com/zencephalon/Tactful_Tokenizer