gpt4 book ai didi

python map减少西里尔文本中的简单字数

转载 作者:行者123 更新时间:2023-11-28 17:43:02 24 4
gpt4 key购买 nike

我正在尝试使用 MRJob 实现一个非常基本的字数统计示例。使用 ascii 输入一切正常,但是当我将西里尔文字混合到输入中时,我得到类似这样的输出

"\u043c\u0438\u0440"    1
"again!" 1
"hello" 2
"world" 1

据我所知,上面第一行是编码的单次出现的西里尔字母“мир”,这是我的示例输入文本的正确结果。这是MR代码

class MRWordCount(MRJob):

def mapper(self, key, line):
line = line.decode('cp1251').strip()
words = line.split()
for term in words:
yield term, 1

def reducer(self, term, howmany):
yield term, sum(howmany)

if __name__ == '__main__':
MRWordCount.run()

我在 Windows 上使用 Python 2.7 和 mrjob 0.4.2。我的问题是:

a) 我如何设法在西里尔文输入上正确地生成可读 西里尔文输出? b) 这种行为的根本原因是什么——是由于 python/MR 版本还是预期在非 Windows 上的工作方式不同——有什么线索吗?

我正在重现 python -c "p​​rint u'мир'"的输出

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Python27\lib\encodings\cp866.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

最佳答案

为了在 Python 2.x 中更易读地打印它,您需要明确地告诉解释器它是一个 unicode 字符串:

>>> print(u"\u043c\u0438\u0440") # note leading u
мир

要将字符串转换为 unicode 字符串,请使用 unicode:

>>> print(unicode("\u043c\u0438\u0440", "unicode_escape"))
мир

关于python map减少西里尔文本中的简单字数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com