如何在Python的文本文件中计算单词(以及带重音的那些!)?

时间:2015-07-29 05:58:51

标签: python diacritics

我想在Python中编写一个脚本,它以file.txt作为输入,并返回一个按其频率排序的单词列表。 我的问题是我的文字是用法语写的,因此有些像“préchauffer”这样的单词在我的下面的脚本(见下文)中很奇怪,而且这有问题。

from collections import Counter
import re
from re import split
import io

def format_print(counter):
    lst = counter.items()
    lst.sort(key=lambda (a, b): (b, a))
    for word, count in lst:
        print "%-16s | %16d" % (word, count)

def count_words(filename):
    stop_words = frozenset(['le', 'la', 'des', 'et', 'des', 'dans', 'les', 'de', 'une', 'un',
     'se', 'sa'])
    text = io.open(filename, 'r', encoding='utf8').read()
    words = re.findall(r'\w+', text)
    cap_words = [word.upper() for word in words if word not in stop_words and len(word) > 1]
    word_counts = Counter(cap_words)
    return word_counts

format_print(count_words("extract.txt"))

删除我的file.txt中的所有重音都没问题,但我还没有找到办法。 非常感谢您的帮助

示例文字

étourdi, etourdi, étourdi, préchauffer

上述文字的结果:

CHAUFFER         |                1
ETOURDI          |                1
PR               |                1
TOURDI           |                2

我的预期结果 (此处为了简洁而未格式化)将是

  • 最好的一个:ÉTOURDI 2, ETOURDI 1, PRÉCHAUFFER 1(实际上,多亏了Burhan Khalid评论,“salé”和“sale”有不同的含义,区分它们会很有用)
  • “ok”一个:ETOURDI 3, PRECHAUFFER 1

1 个答案:

答案 0 :(得分:4)

如果你想标准化强调的字符串(例如:étourdi和etourdi),你可以使用非常好的unidecode模块。

示例:

text = u'étourdi, etourdi, étourdi, préchauffer'
words = re.findall(r'\w+', text, re.U)
cap_words = [unidecode.unidecode(word).upper() for word in words]