解析日语Python

2024-10-03 11:19:34 发布

您现在位置:Python中文网/ 问答频道 /正文

*****用完整代码编辑*****

我试图用Python(3.5.3版)和MacOS上的MeCab库解析一些日语代码。在

我有一个文本如下的txt文件:

石の上に三

我用utf-8设置textEdit的首选项以保存。所以我相信系统正确地将其保存为utf-8格式。在

我得到了以下错误:

Traceback (most recent call last):   File "japanese.py", line 29, in <module>
    words = extractMetadataFromTXT(fileName)   File "japanese.py", line 14, in extractMetadataFromTXT
    md = extractWordsJP(data)   File "japanese.py", line 22, in extractWordsJP
    components.append(parsed.surface) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte

下面是我的全部代码。什么都没少。在

^{pr2}$

有人知道我为什么收到这个错误消息吗?在

有趣的事实:有时它是有效的。:O

提前谢谢你

以色列


Tags: 代码inpy编辑错误linemacosbyte
3条回答

打开文件时,请指定编码:

with open(file, 'r', encoding='utf-8') as f:
    data = f.read()

...

顺便说一句,打开文件时,使用context manager,如本例所示。在

发生错误是因为您正在向UTF-8解码器输入无效的UTF-8。这可能是由于分割字节而不是字符,或者可能是由于错误地试图解码另一种编码,如JIS或EUC,就好像它是UTF-8一样。在Python中,坚持使用unicode字符串是合理的,如果有设置了locale参数,系统可能会切换到对文本文件进行解码。即使您有适当的unicode字符串分割也是一个非常重要的问题,因为有代码可以修改其他字符,例如重音符号。幸运的是,日本人没有这种东西(除非有人碰巧把po编码为ho+ring等等)。在

一个潜在的问题是:Mecab的网页(根据google翻译)“除非另有规定,否则使用euc。”如果Mecab在假设它正在读euc的情况下是分词,它将损坏UTF-8。在

解决方案:

显然,问题出在MeCab,而不是python代码本身。这个问题是,当您使用make从头开始安装它时,有时它无法正确安装,但不会引发任何错误。在

我不知道为什么,但如果你想进一步挖掘,找出到底发生了什么,那就太好了。我只知道我用brew卸载并重新安装了它,它成功了。在

类似的事情也发生在办公室的其他Mac电脑上。我在OS X中使用brew,因此我将发布用于正确安装它的命令:

brew install mecab mecab-ipadic git curl xz

另外,要在linux上安装它,请使用以下命令:

^{pr2}$

希望这能帮助未来的人们尝试标记日语单词。在

相关问题 更多 >