2016-03-02 47 views
3

我有一个西班牙语文本文件,所以它有成千上万的单词,其中一些重音符号。我使用重新模块来提取一些单词,但是当我得到一个列表时,有些单词是不完整的。编码Python列表以便使用重新模块

这是我的代码的第一部分:

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但它没有帮助,因为我的文本来自一个文本文件,所以我不能使用thi s代码:

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

什么是你想用''在你的正则表达式{6}模式呢? – happydave

+0

're.compile(r“\ w +”,re.UNICODE)'是否适合您的情况? – univerio

+0

{6}发现只有6个字母的单词 – estebanpdl

回答

4

您可以利用此r'\b[a-zA-Z]{6}\b'采摘与6个字母的单词, 一些在你的榜样的话有更多的字母和因为你的特殊符号视为不单词字符和字边界工作了这些信件会被截断。

如果你想要6个字母的所有单词,我会用\w

will match the characters [0-9_] plus whatever is classified as alphanumeric in the Unicode character properties database.

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 
+0

没错。我的错。输出显示不完整的单词,但它不应该显示它们,它应该找到像这样的单词:'['...','código','...']'例如。 – estebanpdl

+0

我为您添加了修改后的代码 – tinySandy

+0

非常感谢,@minitoto。它可以工作,但输出如下:'[...'T \ xedtulo','\ xfaltimo','C \ xf3digo','财政','emitir','财政','C \ xf3digo'。 ..]' – estebanpdl