我使用正则表达式以以下方式处理西班牙语文本中的重音元音和«ñ»:
WORD_REGEXP = re.compile(r"[a-zA-Záéíóúñ]+")
尽管它可以很好地处理任何字符串,但当我执行map reduce程序时,它无法正确处理带有"acción"等重音的西班牙语单词,并且该单词在生成的文件中显示为剪切。有一条类似的线路
acci: 6
instead of:
acción: 6
这是python代码。有什么建议吗?非常感谢。
# -*- coding: utf-8 -*-
from mrjob.job import MRJob
import re
WORD_REGEXP = re.compile(r"[a-zA-Záéíóúñ]+")
class MRWordFrequencyCount(MRJob):
def mapper(self, _, line):
words = WORD_REGEXP.findall(line)
for word in words:
yield word.lower(), 1
def reducer(self, key, values):
yield key, sum(values)
if __name__ == '__main__':
MRWordFrequencyCount.run()
这似乎是一个编码问题。
文档建议使用BytesValueProtocol以强制编码。
class MREncodingEnforcer(MRJob):
INPUT_PROTOCOL = BytesValueProtocol
def mapper(self, _, value):
value = value.decode('utf_8')
...