我在读维克多·雨果的著名小说“悲惨世界”。我的项目的一部分是检测小说中每个人物在句子中的存在,并对它们进行计数。这可以通过下面这样的方式轻松完成:
def character_frequency(character_per_sentences_dict,):
characters_frequency = OrderedDict([])
for k, v in character_per_sentences_dict.items():
if len(v) != 0:
characters_frequency[k] = len(v)
return characters_frequency, characters_in_vol
这个馅饼可以很好的工作在所有的角色,除了“画笔”。
我还用下面的代码阅读了文本:
import codecs
import nltk.tokenize
with open(path_to_volume + '.txt', 'r', encoding='latin1') as fp:
novel = ' '.join(fp.readlines())
# Tokenize sentences and calculate the number of sentences
sentences = sent_tokenize(novel)
num_volume = path_to_volume.split("-v")[-1]
我要补充的是,每个地方的口述都是一样的。
知道是怎么回事吗?!
下面是一个示例,其中出现了此名称:
“人们总是应该从逮捕受害者开始。在傍晚时分,沙威已经安排了他的部下,并在林荫道对面戈尔博住宅对面的巴里耶德-戈培林街的树丛中埋伏。他打开口袋,把负责看守洞穴的两个年轻女孩扔进口袋,开始了行动。但他只是把阿泽尔玛关在笼子里。至于爱潘妮,她不在她的岗位上,她已经消失了,他也没能抓住她。这时,沙威已经表明了他的观点,他竖起耳朵,等待着商定的信号。农场的来来去去使他非常着迷。最后,他变得不耐烦了,他肯定那里有个窝,肯定走运了,认出了许多进来的流氓,终于决定不等枪响就上楼去了。“
发布于 2019-04-16 07:36:10
我同意@BoarGules的观点,即可能有一种更有效的方法来解决这个问题。话虽如此,我不知道你的问题出在哪里。Python完全支持Unicode。就在使用Python的标准字符串操作和库的程序逻辑中使用Unicode而言,您可以“就这么做”。
例如,这是可行的:
#!/usr/bin/env python
import requests
names = [
u'Éponine',
u'Cosette'
]
# Retrieve Les Misérables from Project Gutenberg
t = requests.get("http://www.gutenberg.org/files/135/135-0.txt").text
for name in names:
c = t.count(name)
print("{}: {}".format(name, c))
结果:
Éponine: 81
Cosette: 1004
我显然没有你所拥有的文本,所以我不知道它是如何编码的,或者它是如何被读取的。没有它我就不能测试它。在这段代码中,我从互联网上获取源文本。我的观点是,只要您的输入是合理的,非ASCII字符就不应该对您造成任何障碍。
运行它的所有时间都花在了阅读文本上。我认为即使你添加了几十个名字,在任何一台像样的电脑上也不会有明显的延迟。所以这个方法工作得很好。
https://stackoverflow.com/questions/55697450
复制相似问题