分析带有法语名称的英文文本

时间:2019-04-15 21:24:37

标签: 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) != 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”的口号到处都是相同的。

知道发生了什么吗?!

以下是该名称的示例:

”应该始终通过逮捕受害者来开始 夜幕降临时,贾维特(Javert)张贴了他的士兵,并在林荫大道另一侧面对戈尔博(Gorbeau)房屋的拉巴雷德里德斯-戈贝林街(Rue de la Bar­rieredes-Gobelins)的树木之间埋伏。他开始做手术的时候是打开口袋,然后将两个负责监视看守书房的方法的年轻女孩放进去。但是他只关押了阿泽尔玛。至于Èponine,她不在她的岗位上,她失踪了,他无法抓住她。然后贾维特指出了一个要点,他弯下腰来等待达成一致的信号。恐怖袭击的来龙去脉使他大为振奋。最后,他变得不耐烦了,并且确保在那里有一个窝,肯定会碰运气,因为他认识了许多进入的the子,所以他终于决定上楼而不等手枪射击。”

1 个答案:

答案 0 :(得分:1)

我同意@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字符就不会对您造成任何阻碍。

运行此代码的所有时间都花在阅读文本上。我认为,即使您添加了几十个名称,也不会在任何像样的计算机上造成明显的延迟。所以这种方法很好用。