epo*_*po3 2 python nlp sum count text-mining
我开始学习Python,我正在尝试编写一个导入文本文件的程序,计算单词总数,计算特定段落中的单词数(由每个参与者表示,由'P1'描述) ,'P2'等),从我的单词计数中排除这些单词(即'P1'等),并分别打印段落.
感谢@James Hurford我得到了这段代码:
words = None
with open('data.txt') as f:
words = f.read().split()
total_words = len(words)
print 'Total words:', total_words
in_para = False
para_type = None
paragraph = list()
for word in words:
if ('P1' in word or
'P2' in word or
'P3' in word ):
if in_para == False:
in_para = True
para_type = word
else:
print 'Words in paragraph', para_type, ':', len(paragraph)
print ' '.join(paragraph)
del paragraph[:]
para_type = word
else:
paragraph.append(word)
else:
if in_para == True:
print 'Words in last paragraph', para_type, ':', len(paragraph)
print ' '.join(paragraph)
else:
print 'No words'
Run Code Online (Sandbox Code Playgroud)
我的文本文件如下所示:
P1:Bla bla bla.
P2:Bla bla bla bla.
P1:Bla bla.
P3:Bla.
我需要做的下一部分是总结每个参与者的话.我只能打印它们,但我不知道如何返回/重用它们.
除了总结每个参与者所说的所有单词之外,我还需要一个新的变量,每个参与者都有一个字数,我可以稍后操作.
P1all = sum of words in paragraph
Run Code Online (Sandbox Code Playgroud)
有没有办法把"你是"或"它的"等等算作两个字?
任何想法如何解决?
我需要一个新的变量,为每个参与者提供单词计数,以后我可以操作
不,你需要一个Counter(Python 2.7+,否则使用a defaultdict(int))将人员映射到字数.
from collections import Counter
#from collections import defaultdict
words_per_person = Counter()
#words_per_person = defaultdict(int)
for ln in inputfile:
person, text = ln.split(':', 1)
words_per_person[person] += len(text.split())
Run Code Online (Sandbox Code Playgroud)
现在words_per_person['P1']包含单词的数量P1,假设text.split()是一个足够好的标记器,用于您的目的.(语言学家不同意词的定义,所以你总是会得到一个近似值.)