python map 中的正则表达式减少:计算带有 «ñ» 和重音元音的单词



我使用正则表达式以以下方式处理西班牙语文本中的重音元音和«ñ»:

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')
        ...

相关内容

  • 没有找到相关文章

最新更新