【问题标题】:Suggested sentence splitting code is not working for one sentence (can somebody reproduce it or explain?)建议的句子拆分代码不适用于一个句子(有人可以复制或解释吗?)
【发布时间】:2019-05-14 22:47:41
【问题描述】:

只是对 TennisVisuals 在本次讨论中提供的代码的跟进:Python split text on sentences 我试图用两句话解析以下段落,但代码(请参阅引用的链接)不起作用。我想知道是否其他人可以重现该错误。

我得到的错误是解析器在该段落的句子列表中给出了 1 个项目的 len 数,好像句点未被识别为句子分隔符。

TwoSentencesParagraph = “部长必须准备一份关于具体计划实施情况的年度报告。该报告包含在社会团结部长的年度管理报告中。” 代码在讨论Python split text on sentences中提供。

它包含以下几行(以及其他几行):

def find_sentences(paragraph):
    end = True
    sentences = []
    while end > -1:
        end = find_sentence_end(paragraph)
        if end > -1:
            sentences.append(paragraph[end:].strip())
            paragraph = paragraph[:end]
    sentences.append(paragraph)
    sentences.reverse()
    return sentences

【问题讨论】:

  • 在提供minimal reproducible example 时,代码必须以文本形式包含在问题的正文中,这样人们就不必到处点击才能弄清楚您在说什么。跨度>
  • 解决方案@DGreenberg 工作正常
  • 抱歉缺少代码。我复制了它,但它被拒绝了,因为它似乎格式不正确。我指的代码是 TennisVisuals 建议的代码,它不依赖于正则表达式。
  • 代码有以下几行: def find_sentences(paragraph): end = True sentences = [] while end > -1: end = find_sentence_end(paragraph) if end > -1: sentence.append(paragraph [end:].strip()) 段落 = 段落[:end] sentence.append(paragraph) sentence.reverse() 返回句子

标签: python text split sentence


【解决方案1】:

您没有将代码放入问题中,但我在链接上接受的答案中尝试了您的输入(我假设这是您使用的代码)。我发现我确实必须添加一行代码和一组括号才能让它运行,但从你的问题来看,听起来程序运行但失败了。当我运行它时,它确实成功了。

答案中列出的代码:

import nltk.data

tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
fp = open("test.txt")
data = fp.read()
print '\n-----\n'.join(tokenizer.tokenize(data))

我运行成功的代码:

import nltk.data
nltk.download('punkt')

tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
fp = open("test.txt")
data = fp.read()
print ('\n-----\n'.join(tokenizer.tokenize(data)))

程序的输出:

The Minister must prepare an annual report on the implementation of specific 
programs.
-----
The report is included in the annual management report of the Ministere de l’Emploi 
et de la Solidarite sociale.

我想提一下,对于这段代码,输入必须在 .txt 文件中,输出将到控制台。

如果我遗漏了什么或者我的任何假设是错误的,请告诉我,以便我尝试修复它。在您的答案中添加更多信息并减少对链接的依赖可能会帮助您获得更准确和相关的答案。例如,程序失败的方式有很多种,因此解释和/或示例输出和预期输出可能会有很长的路要走。

【讨论】:

  • 对不起,就像我在上一个答案中所说的那样,我尝试复制并粘贴代码,但由于格式不正确而无法解决。我指的是 TennisVisuals 的代码,它不依赖于正则表达式,我没有指 nltk 代码。
  • 代码以这一行开头(除了开头的列表 def find_sentences(paragraph): end = True sentence = [] while end > -1: end = find_sentence_end(paragraph) if end > -1:sences.append(paragraph[end:].strip()) 段落 = 段落[:end] sentence.append(paragraph)sentence.reverse() 返回句子
猜你喜欢
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2014-11-21
  • 1970-01-01
  • 2021-04-28
相关资源
最近更新 更多