Python 3.x 仅对某些部分进行字数统计

Python 3.x 仅对某些部分进行字数统计,python-3.x,Python 3.x,我正在尝试从文本文件中获取字数。这一部分相对容易。我的困难是,这个文件是一个成绩单,每个演讲者可以讲不同数量的台词,我只想得到演讲者1的字数。幸运的是,每次新的演讲者开始讲话时,我们都有他们的名字和冒号。示例如下: 演讲者1:Lorem ipsum dolor sit amet,尊敬的精英。在tincidunt erat的Praesent。没有同一天是威尼斯人的天堂。无主无主,无主无主。在前8月,这是一个很好的例子。《权杖选》中的Phasellus、finibus sapien vel、orna

我正在尝试从文本文件中获取字数。这一部分相对容易。我的困难是,这个文件是一个成绩单,每个演讲者可以讲不同数量的台词,我只想得到演讲者1的字数。幸运的是,每次新的演讲者开始讲话时,我们都有他们的名字和冒号。示例如下:

演讲者1:Lorem ipsum dolor sit amet,尊敬的精英。在tincidunt erat的Praesent。没有同一天是威尼斯人的天堂。无主无主,无主无主。在前8月,这是一个很好的例子。《权杖选》中的Phasellus、finibus sapien vel、ornare ex.Proin faucibus eleifend Volatipat。无外阴的最大胎生在怀孕前的生命。两人都是温和的侵权者,他们的效率很低。在拍卖商sed的康格河畔(quam mi),产自蒙特斯(montes)的天然肉牛和马格纳斯(magnis)品种的新元素(elementum nec ex.Orci varius natoque penatibus)和黄牛(nascetur ridiculus mus)。塞德·亨德雷特·阿贾斯托·鲁特罗姆·萨吉蒂斯是一位精英。 演讲者2:塞德在阿利夸姆·尼布。努克·拉奥里特·奥奇·里苏斯,奥纳精英的生命。 发言人1:roin massa ante,调味品ornare justo nec,孕妇直径。但是尼布·梅特斯,阿利奎姆坐在一个大教堂里

我正在尝试只计算说话人1的字数。正如您所见,每个发言者可能只会说一句话,也可能会说几句话。这是我用来计算字数的代码。我只对3个字母以上的单词感兴趣

import string
fhand = open('transcript.txt')
counts = dict()
for line in fhand:
    line = line.translate(str.maketrans('', '', string.punctuation))
    line = line.lower()
    words = line.split()
    for word in words:
        if len(word) < 4: continue
        else:
            if word not in counts:
                counts[word] = 1
            else:
                counts[word] += 1

# Sort the dictionary by value
lst = list()
for key, val in list(counts.items()):
    lst.append((val, key))

lst.sort(reverse=True)

for key, val in lst[:100]
    print(val,key)
导入字符串
fhand=open('transcript.txt')
计数=dict()
对于fhand中的线路:
line=line.translate(str.maketrans(“”,,,string.标点))
line=line.lower()
words=line.split()
用文字表示:
如果len(word)<4:继续
其他:
如果单词不在计数中:
计数[字]=1
其他:
计数[字]+=1
#按值对字典排序
lst=列表()
对于键,列表中的val(counts.items()):
lst.append((val,key))
lst.sort(反向=真)
对于键,lst中的val[:100]
打印(val,键)

首先将整个文件读入字符串:

with open('transcript.txt', 'r') as f:
    a = f.read()
然后仅获取与发言人1相关的部分:

b = [i for i in a.split('Speaker ') if i.startswith('1:')]
替换字符串中的1::

c = ''.join(b).replace('1:', '')
使用计数器获取字数字典:

from collections import Counter
d = Counter(c.split())
它会给你这样的东西

Counter({'Duis': 1,
     'In': 2,
     'Lorem': 1,
     'Nulla': 2,
     'Orci': 1,
     'Phasellus': 1,
     'Praesent': 1,
     'Proin': 1,
     'Sed': 1, ....
修改特定发言人姓名: 假设您有以下字符串:

'JIM: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tincidunt erat. Nulla ac ipsum id est cursus venenatis eget nec velit. Nulla sollicitudin sed nulla et aliquet. In ex augue, tincidunt id lacus vel, feugiat rhoncus nisl. Phasellus in lectus scelerisque, finibus sapien vel, ornare ex. Proin faucibus eleifend volutpat. Vivamus maximus risus a nulla vulputate gravida vitae consequat ante. Duis malesuada blandit tortor, sed efficitur leo porta vel. In quam mi, congue in auctor sed, elementum nec ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed hendrerit elit ac justo rutrum sagittis. JEFF: Sed at aliquam nibh. Nunc laoreet orci risus, vitae ornare elit tempus eget. JIM: roin massa ante, condimentum ornare justo nec, vehicula gravida diam. Ut nibh metus, aliquam sit amet consequat at, vulputate a magna.\n'
以下函数将字符串作为第一个参数,名称作为第二个参数:

def get_word_count(S, N):
    w = []
    a = False
    for i in S.split():
        if i == N:
             a = True
        if i != N and ':' in i:
             a = False
        if a:
             w += [i]
    return Counter(w)
现在,如果您想获得“JIM”的字数,请使用

JIM = get_word_count(a, 'JIM:')
对于“杰夫”:

JEFF = get_word_count(a, 'JEFF:')

首先将整个文件读入字符串:

with open('transcript.txt', 'r') as f:
    a = f.read()
然后仅获取与发言人1相关的部分:

b = [i for i in a.split('Speaker ') if i.startswith('1:')]
替换字符串中的1::

c = ''.join(b).replace('1:', '')
使用计数器获取字数字典:

from collections import Counter
d = Counter(c.split())
它会给你这样的东西

Counter({'Duis': 1,
     'In': 2,
     'Lorem': 1,
     'Nulla': 2,
     'Orci': 1,
     'Phasellus': 1,
     'Praesent': 1,
     'Proin': 1,
     'Sed': 1, ....
修改特定发言人姓名: 假设您有以下字符串:

'JIM: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent in tincidunt erat. Nulla ac ipsum id est cursus venenatis eget nec velit. Nulla sollicitudin sed nulla et aliquet. In ex augue, tincidunt id lacus vel, feugiat rhoncus nisl. Phasellus in lectus scelerisque, finibus sapien vel, ornare ex. Proin faucibus eleifend volutpat. Vivamus maximus risus a nulla vulputate gravida vitae consequat ante. Duis malesuada blandit tortor, sed efficitur leo porta vel. In quam mi, congue in auctor sed, elementum nec ex. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed hendrerit elit ac justo rutrum sagittis. JEFF: Sed at aliquam nibh. Nunc laoreet orci risus, vitae ornare elit tempus eget. JIM: roin massa ante, condimentum ornare justo nec, vehicula gravida diam. Ut nibh metus, aliquam sit amet consequat at, vulputate a magna.\n'
以下函数将字符串作为第一个参数,名称作为第二个参数:

def get_word_count(S, N):
    w = []
    a = False
    for i in S.split():
        if i == N:
             a = True
        if i != N and ':' in i:
             a = False
        if a:
             w += [i]
    return Counter(w)
现在,如果您想获得“JIM”的字数,请使用

JIM = get_word_count(a, 'JIM:')
对于“杰夫”:

JEFF = get_word_count(a, 'JEFF:')

例如,如果您只想按
JIM
数数单词,则可以执行以下操作:

import re
from collections import Counter
with open('transcript.txt', 'r') as fhand:
    words = Counter(re.sub(r'\w+(?<!JIM):(?:(?!JIM:).)*|JIM:','',fhand).split())

print(words)

例如,如果您只想按
JIM
数数单词,则可以执行以下操作:

import re
from collections import Counter
with open('transcript.txt', 'r') as fhand:
    words = Counter(re.sub(r'\w+(?<!JIM):(?:(?!JIM:).)*|JIM:','',fhand).split())

print(words)

嗨,mamun-起初我以为这个解决方案有效,但它没有:(如果我没有正确地执行,我很抱歉。它让我对列表中的每一项进行计数,不管它是否由发言人1:或发言人2:开头。而且,这完全是我的错,而不是你的错,我的实际记录有吉姆:和杰夫:以及其他30位发言人的名字。有没有办法让这些名字不出现?Sorry、 一开始我认为这是可行的。再次感谢mamun;这确实起到了作用。感谢您的耐心和专业知识!嗨mamun-我认为这个解决方案一开始是可行的,但它没有:(如果我没有正确地执行,我很抱歉。它让我对列表中的每一项进行计数,不管它是否由发言人1:或发言人2:开头。而且,这完全是我的错,而不是你的错,我的实际记录有吉姆:和杰夫:以及其他30位发言人的名字。有没有办法让这些名字不出现?Sorry、 一开始我认为这很有效。再次感谢马蒙;这确实起到了作用。感谢你的耐心和专业知识!这更好。这更好。