Python 用法语名称分析英语文本

Python 用法语名称分析英语文本,python,character-encoding,Python,Character Encoding,我正在处理维克多·雨果的著名小说《悲惨世界》。 我的项目的一部分是在一个句子中检测小说中每个人物的存在,并对他们进行计数。这可以通过以下方式轻松实现: def character_frequency(character_per_sentences_dict,): characters_frequency = OrderedDict([]) for k, v in character_per_sentences_dict.items(): if len(v) !=

我正在处理维克多·雨果的著名小说《悲惨世界》。 我的项目的一部分是在一个句子中检测小说中每个人物的存在,并对他们进行计数。这可以通过以下方式轻松实现:

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
除了“Èponine”,这种馅饼可以很好地适合所有角色

我还阅读了带有以下代码的文本:

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]
我要补充的是,“Èponine”的口述在任何地方都是一样的

知道发生了什么吗

以下是一个使用此名称的示例:

“一开始就应该逮捕受害者
夜幕降临时,沙威派他的人在林荫大道另一边的戈尔博家对面的戈伯林街的树林中埋伏。沙威开始行动,打开口袋,把两个负责监视偷渡的年轻姑娘扔到树里他躲了起来。但他只是把阿泽尔玛关在笼子里。至于伊波宁,她不在岗位上,她失踪了,他也没能抓住她。然后沙威指出了一点,低头等待着双方同意的信号。菲亚克斯的来来往往让他非常不安。最后,他变得不耐烦了,并且确信他已经不耐烦了在那里有一个巢穴,肯定很幸运,在认出了许多闯入的歹徒之后,他终于决定上楼,不用等手枪射击。”

我同意@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字符就不应该对您造成任何障碍


运行此程序的所有时间都花在阅读文本上。我想即使你加了几十个名字,在任何一台像样的计算机上加起来也不会造成明显的延迟。因此,这种方法效果很好。

它在什么方面不起作用?@KevinWang“Èponin”这个词在听写时至少存在两次,但频率为零!这让我真的很困惑,为什么要指定必要的编码?这可能会导致相同的单词被检测为不同的,因为Python(3)的编码默认为Unicode。另外,我假设您的工作代码与此代码非常不同,原因有几个,包括几个关键字拼错了大写字母,并且“novel”变量在声明之外没有被使用。您似乎正在使用原始字符串处理来检测高级文本实体,如专有名称。请查看
nltk
(),它有更适合此任务的复杂工具。您使用了吗?正如@FedericoS所说,您是否尝试过不指定编码='拉丁'?是python2还是python3?我已经编辑了我的问题,还添加了一段带有提到的名称的文本。感谢您的帮助!