如何在对话中总结每个人的字数?

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)

有没有办法把"你是"或"它的"等等算作两个字?

任何想法如何解决?

Fre*_*Foo 5

我需要一个新的变量,为每个参与者提供单词计数,以后我可以操作

不,你需要一个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()是一个足够好的标记器,用于您的目的.(语言学家不同意的定义,所以你总是会得到一个近似值.)