我有一个西班牙语的文本文件,因此它有数千个单词,其中一些带有重音符号。我使用re模块来提取一些单词,但是当我得到一个列表时,有些单词是不完整的。
这是我的代码的第一部分:
projectsinline = open('projectsinline.txt', 'r')
for lines in projectsinline:
pattern = r'\b[a-zA-Z]{6}\b'
words = re.findall(pattern, lines)
print words
这是输出的一个例子:
['creaci', 'Estado', 'relaci', 'Regula', 'estado', 'comisi', 'delito']
应该是这样的:
['creación', 'Estado', 'relación', 'Regula', 'estado', 'comisión', 'delito']
我找到了这个答案:Encode Python list to UTF-8但它没有帮助,因为我的文字来自文本文件,因此我无法使用此代码:
import re
import codecs
import sys
sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)
projectsinline = open('projectsinline.txt', 'r')
for lines in projectsinline:
pattern = ur'\b[a-zA-Z]{6}\b'
unicode_pattern = re.compile(pattern, re.UNICODE)
result = unicode_pattern.findall(lines)
print result
现在,输出会跳过具有重音的单词。
对于解决问题的任何建议表示赞赏?
谢谢!
答案 0 :(得分:4)
您使用此r'\b[a-zA-Z]{6}\b'
选择包含6个字母的字词,
你的例子中的一些单词有更多的字母,这些字母被切断,因为你的特殊符号被认为不是单词字符和单词边界。
如果您想要所有包含6个字母的单词,我会使用\w
。
将匹配字符[0-9_]以及任何被归类为的字符 Unicode字符属性数据库中的字母数字。
import re
import codecs
with codecs.open('projectsinline.txt', 'r', encoding="utf-8") as f:
for line in f:
unicode_pattern = re.compile(r'\b\w{6}\b', re.UNICODE)
result = unicode_pattern.findall(line)
for word in result:
print word
示例字符串:
creación, longstring, lación, Regula, estado, misión
输出:
lación
Regula
estado
misión