我正在尝试在python中加载文件。如果运行以下代码并加载仅包含英语单词的文件,则将加载很好。

Listado.txt是一个西班牙语文件,包含以下单词:abacá,abadí,abadía,abajeño,abaniquería

西班牙语包含带重音的字母(例如é)或特殊字符(变音符号),这就是问题所在,当我尝试将此文件加载到Python中时会抱怨。我希望能够规范化列表,或删除重音符号并加载列表。

我尝试使用进行规范化:

unicodedata.normalize('NFD', line).encode('ascii', 'ignore')


我得到以下错误:

TypeError:normalize()参数2必须是str,而不是list

到目前为止的代码:

import random
import string
import unicodedata

#WORDLIST_FILENAME = "words_alpha.txt"
WORDLIST_FILENAME = "listado.txt"

def loadWords():
    print("Loading word list from file...")
    # inFile: file
    inFile = open(WORDLIST_FILENAME, 'r')
    wordlist =[]
    for line in inFile:
        line = line.split()
        wordlist.extend(line)
#        unicodedata.normalize('NFD', line).encode('ascii', 'ignore')
        print(" "), len(wordlist), ("words loaded.")

    return wordlist

最佳答案

如错误所言,您尝试像以前一样normalize line,这是一个列表,line = line.split()。在将行拆分成单词之前,只需对其进行规范化即可,如下所示:

for line in inFile:
    unicodedata.normalize('NFD', line).encode('ascii', 'ignore')
    line = line.split()
    wordlist.extend(line)
    print(" "), len(wordlist), ("words loaded.")


另外,如果您想在规范化之前扩展单词列表,则可以使用列表推导来分别对每个单词进行规范化,以进行以下操作。

for line in inFile:
    line = line.split()
    wordlist.extend(line)
    line = [unicodedata.normalize('NFD', x).encode('ascii', 'ignore') for x in line]
    print(" "), len(wordlist), ("words loaded.")

关于python - Unicodedata.normalize:TypeError:normalize()参数2必须是str,而不是list,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59160978/

10-12 22:45