Регулярные выражения в карте Python уменьшают: подсчет слов с «ñ» и гласных с ударением

Я использую регулярное выражение для управления ударными гласными и «ñ» ​​в испанских текстах следующим образом:

WORD_REGEXP = re.compile(r"[a-zA-Záéíóúñ]+")

Хотя он отлично работает с любой строкой, когда я запускаю программу сокращения карты, она не обрабатывает должным образом испанские слова с акцентами, такими как «acción», и слово появляется в результирующем файле. Есть такая строчка

acci: 6

instead of:

acción: 6

Вот код питона. Какие-либо предложения? Спасибо.

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

person Alvaro Fierro Clavero    schedule 06.12.2015    source источник
comment
Хм... WORD_REGEXP.findall(line) дает мне ['acci', 'instead', 'of', 'acción']. Разве это не правильно? Каков ожидаемый результат?   -  person Casimir Crystal    schedule 06.12.2015
comment
Ожидаемый вывод будет с полным ключом: «acción» вместо «acci».   -  person Alvaro Fierro Clavero    schedule 06.12.2015


Ответы (1)


Похоже на проблему с кодировкой.

документация предлагает использовать BytesValueProtocol для принудительного кодирования.

class MREncodingEnforcer(MRJob):

    INPUT_PROTOCOL = BytesValueProtocol

    def mapper(self, _, value):
        value = value.decode('utf_8')
        ...
person Arthur Gouveia    schedule 28.09.2017