在文本文件中打印出句子数

时间:2018-11-18 03:15:04

标签: python python-3.x list

所以我真的看不到我在做什么错,句子的数目一直说是0,但是我试图用text.count('。')

计算句子/停止的数目。

我的代码中是否有任何内容会使此打印结果显示为“ 0”?

谢谢

def countSentences(fileName) :
    """This is a function to count the number
    of sentences in a given text file"""
    f = open(fileName, 'r')
    text = f.read()
    text = text.split()
    print("Total sentences : " + str(text.count('.')))

    f.close()

在Main()我有

print(countSentences('phrases.txt'))

传递带有很多句子的文件。

3 个答案:

答案 0 :(得分:2)

从您的代码中可以看出,var text是一个字符串数组,因此该计数将找不到仅.的字符串

对句子进行计数是一件非常棘手的事情,因为.可能会出现在许多不以句子结尾的事物中。我建议使用nltk或spacy之类的内容来更有效地完成此任务。

答案 1 :(得分:0)

好的,让我们看看。 更正您的代码以计为“。”这是一件容易的事。它会像这样:

  with open('example_file.txt', 'rb') as f:
      text = str(f.read())
      num_sentences = str(text.count('.'))
      print("Number of sentences found: {}".format(num_sentences))

但是,正如约书亚指出的那样,数为“。”是不足够的。在很多情况下,点可能会出现为不是句子边界。例如,考虑缩写甚至表情符号。为了计算句子数,您需要一个为此或至少一种更复杂的方法设计的自然语言处理库。

考虑一个名为example_file.txt的文件,其中包含以下内容:

  

您好,这是一个示例文件。我很高兴你找到了我。的   现在是下午2:00希望你有美好的一天。

您的代码将回答5,但正确的答案是4。

以下代码显示了该错误以及如何使用spacy正确完成该错误。

with open('example_file.txt', 'rb') as f:
    text = str(f.read())
    num_sentences = str(text.count('.'))
    print("Number of sentences found: {}".format(num_sentences))
    import spacy
    nlp = spacy.load('en')
    doc = nlp(text)
    print("Actual number of sentences: {}".format(len(list(doc.sents))))

希望它会有所帮助:)

答案 2 :(得分:0)

spaCy 将解决您的问题。

nchar(gsub("[^BC]", "", temp$A))
#[1] 0 1 1 2

import spacy nlp = spacy.load('en_core_web_sm') with open('fileNamepath') as f: doc = nlp(f.read()) sentence_tokens = [[token.text for token in sent] for sent in doc.sents] print(len(sentence_tokens)) 使用迭代器sentence_tokens创建在fileName中每个句子上迭代的字符串列表。您可以详细了解here