Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析日语Python_Python_Mecab - Fatal编程技术网

解析日语Python

解析日语Python,python,mecab,Python,Mecab,*****用完整代码编辑****** 我正在尝试使用Python 3.5.3版和MacOS上的MeCab库解析一些日文代码 我有一个包含以下文本的txt文件: 石の上に三年 我在textEdit上设置了我的首选项,以便使用utf-8保存。因此,我相信系统正确地将其保存为utf-8格式 我得到了以下错误: Traceback (most recent call last): File "japanese.py", line 29, in <module> words = e

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

我正在尝试使用Python 3.5.3版和MacOS上的MeCab库解析一些日文代码

我有一个包含以下文本的txt文件:

石の上に三年

我在textEdit上设置了我的首选项,以便使用utf-8保存。因此,我相信系统正确地将其保存为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
有人知道我为什么会收到这个错误消息吗

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

提前感谢,


Israel

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

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

...

顺便说一句,打开文件时,请使用如本例所示的

发生错误的原因是您正在将无效的UTF-8内容输入UTF-8解码器。这可能是由于拆分字节而不是字符,或者可能是由于错误地尝试解码另一种编码,如JIS或EUC,就好像它是UTF-8一样。在Python中,坚持使用unicode字符串通常是明智的,如果有什么设置了参数,您的系统可能会切换到解码文本文件。即使您确实有正确的unicode字符串拆分也是一个非常重要的问题,因为有代码可以修改其他字符串,例如重音符号。幸运的是,日本人没有太多类似的东西,除非有人碰巧将po编码为ho+环等

一个潜在的问题:Mecab的网页声明每谷歌翻译,除非另有规定,否则使用euc。如果Mecab在读取EUC的假设下进行分词,它将损坏UTF-8

解决方案:

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

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

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

brew install mecab mecab-ipadic git curl xz
另外,要在linux上安装,请使用以下命令:

sudo apt-get install mecab libmecab-dev mecab-ipadic
sudo apt-get install mecab-ipadic-utf8
sudo apt-get install python-mecab

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

TypeError:get type str需要一个整数,它应该读取encoding='utf-8',尽管它需要Python 3,并且可能无法解决此问题。谢谢Yann,我缺少encoding='utf-8'部分。但是,正如你所预测的,它并没有解决问题。它有时起作用,但不起作用。我需要一些稳定的东西,而不是随机性。它不应该是utf-8,否则一开始就不会有错误。OP中的错误消息明确说明已经使用了utf-8@israel.zing您知道原始文件使用哪种编码吗?-哦,提供完整的回溯会很好^^^我不认为这是随机的,我认为它依赖于数据。甚至可能是您的输入数据实际上格式不正确。我将textEdit的配置设置为仅保存在utf-8中,错误仍然存在:该错误只能由编码问题引起,因此您的文本编辑设置可能无法工作。从shell、cd到目录,输入文件并键入file simple_japanese.txt。应该是UTF-8 Unicode文本。
sudo apt-get install mecab libmecab-dev mecab-ipadic
sudo apt-get install mecab-ipadic-utf8
sudo apt-get install python-mecab