我编写了以下代码来标记来自文件samp.txt的输入段落。有人可以帮我找出并打印文件中的句子,单词和字符的数量吗?我在python中使用了NLTK。
>>>import nltk.data
>>>import nltk.tokenize
>>>f=open('samp.txt')
>>>raw=f.read()
>>>tokenized_sentences=nltk.sent_tokenize(raw)
>>>for each_sentence in tokenized_sentences:
... words=nltk.tokenize.word_tokenize(each_sentence)
... print each_sentence #prints tokenized sentences from samp.txt
>>>tokenized_words=nltk.word_tokenize(raw)
>>>for each_word in tokenized_words:
... words=nltk.tokenize.word_tokenize(each_word)
... print each_words #prints tokenized words from samp.txt
答案 0 :(得分:7)
以这种方式尝试(此程序假定您正在使用dirpath
指定的目录中的一个文本文件):
import nltk
folder = nltk.data.find(dirpath)
corpusReader = nltk.corpus.PlaintextCorpusReader(folder, '.*\.txt')
print "The number of sentences =", len(corpusReader.sents())
print "The number of patagraphs =", len(corpusReader.paras())
print "The number of words =", len([word for sentence in corpusReader.sents() for word in sentence])
print "The number of characters =", len([char for sentence in corpusReader.sents() for word in sentence for char in word])
希望这有帮助
答案 1 :(得分:1)
使用nltk,您还可以使用FreqDist(请参阅O'Reillys Book Ch3.1)
在你的情况下:
import nltk
raw = open('samp.txt').read()
raw = nltk.Text(nltk.word_tokenize(raw.decode('utf-8')))
fdist = nltk.FreqDist(raw)
print fdist.N()
答案 2 :(得分:1)
如果有人来这里是值得的。这解决了我认为OP问题的所有问题。如果使用textstat
包,则计算句子和字符非常容易。每个句子末尾的标点符号都有一定的重要性。
import textstat
your_text = "This is a sentence! This is sentence two. And this is the final sentence?"
print("Num sentences:", textstat.sentence_count(your_text))
print("Num chars:", textstat.char_count(your_text, ignore_spaces=True))
print("Num words:", len(your_text.split()))
答案 3 :(得分:0)
对于单词和句子,您可能需要清楚地说明您对句子的定义以及单词和程序。
答案 4 :(得分:0)
不是100%正确,但我只是尝试了一下。我没有考虑@wilhelmtell的所有观点。一旦我有时间,我会尝试一下......
if __name__ == "__main__":
f = open("1.txt")
c=w=0
s=1
prevIsSentence = False
for x in f:
x = x.strip()
if x != "":
words = x.split()
w = w+len(words)
c = c + sum([len(word) for word in words])
prevIsSentence = True
else:
if prevIsSentence:
s = s+1
prevIsSentence = False
if not prevIsSentence:
s = s-1
print "%d:%d:%d" % (c,w,s)
这里1.txt是文件名。
答案 5 :(得分:0)
解决此问题的唯一方法是创建一个使用 N 自然 L 语言 P的AI程序处理,这不是一件容易的事。
输入:
“这是关于Turing机器的一段。AllanTuring博士发明了Turing机器。它解决了一个需要解决0.1%的变化的问题。”
结帐 OpenNLP
答案 6 :(得分:0)
我相信这是正确的解决方案,因为它正确地计算了诸如“...”和“??”之类的东西。作为一个句子
len(re.findall(r"[^?!.][?!.]", paragraph))
答案 7 :(得分:-3)
已经有一个计算单词和字符的程序 - wc
。