所以我真的看不到我在做什么错,句子的数目一直说是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'))
传递带有很多句子的文件。
答案 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