python map中的正则表达式减少:用“ñ”和带重音的元音计数单词

时间:2015-12-06 08:57:57

标签: python regex mapreduce mrjob

我使用正则表达式来按照以下方式操作西班牙语文本中的重音元音和“ñ”:

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()

1 个答案:

答案 0 :(得分:0)

这似乎是编码问题。

documentation建议使用BytesValueProtocol 强迫编码。

class MREncodingEnforcer(MRJob):

    INPUT_PROTOCOL = BytesValueProtocol

    def mapper(self, _, value):
        value = value.decode('utf_8')
        ...