解析日语 Python
Parsing Japanese Python
*****使用完整代码编辑******
我正在尝试使用 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
下面是我的完整代码。什么都不缺。
import MeCab
import nltk
from nltk import *
from nltk.corpus import knbc
mt = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd")
wordsList = knbc.words()
fdist = nltk.FreqDist(w.lower() for w in wordsList)
def extractMetadataFromTXT(filePath):
with open(filePath, 'r', encoding='utf-8') as f:
data = f.read()
print(data)
md = extractWordsJP(data)
print(md)
return md
def extractWordsJP(wordsJP):
components = []
parsed = mt.parseToNode(wordsJP)
while parsed:
components.append(parsed.surface)
parsed = parsed.next
return components
if __name__ == "__main__":
fileName = "simple_japanese.txt"
words = extractMetadataFromTXT(fileName)
print(words)
有人知道为什么我会收到此错误消息吗?
有趣的事实:有时它会起作用。 :O
提前致谢,
以色列
打开文件时,指定编码:
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 翻译)"Unless otherwise specified, euc is used." 如果 Mecab 在假设它正在读取 EUC 的情况下进行分词,它将破坏 UTF-8。
解决方案:
显然,问题出在 MeCab,而不是 python 代码本身。这个问题是,当您使用 make 从头开始安装它时,有时它无法正确安装,但不会引发任何错误。
我不确定为什么,但如果您想进一步挖掘并找出到底发生了什么,那就太好了。我只知道我用 brew 卸载并重新安装了一次,它成功了。
办公室的其他 Mac 上也发生了类似的事情。我在 OS X 中使用 brew,所以我将 post 我用来正确安装它的命令:
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
希望这对以后尝试标记日语单词的人有所帮助。
*****使用完整代码编辑******
我正在尝试使用 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
下面是我的完整代码。什么都不缺。
import MeCab
import nltk
from nltk import *
from nltk.corpus import knbc
mt = MeCab.Tagger("-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd")
wordsList = knbc.words()
fdist = nltk.FreqDist(w.lower() for w in wordsList)
def extractMetadataFromTXT(filePath):
with open(filePath, 'r', encoding='utf-8') as f:
data = f.read()
print(data)
md = extractWordsJP(data)
print(md)
return md
def extractWordsJP(wordsJP):
components = []
parsed = mt.parseToNode(wordsJP)
while parsed:
components.append(parsed.surface)
parsed = parsed.next
return components
if __name__ == "__main__":
fileName = "simple_japanese.txt"
words = extractMetadataFromTXT(fileName)
print(words)
有人知道为什么我会收到此错误消息吗?
有趣的事实:有时它会起作用。 :O
提前致谢,
以色列
打开文件时,指定编码:
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 翻译)"Unless otherwise specified, euc is used." 如果 Mecab 在假设它正在读取 EUC 的情况下进行分词,它将破坏 UTF-8。
解决方案:
显然,问题出在 MeCab,而不是 python 代码本身。这个问题是,当您使用 make 从头开始安装它时,有时它无法正确安装,但不会引发任何错误。
我不确定为什么,但如果您想进一步挖掘并找出到底发生了什么,那就太好了。我只知道我用 brew 卸载并重新安装了一次,它成功了。
办公室的其他 Mac 上也发生了类似的事情。我在 OS X 中使用 brew,所以我将 post 我用来正确安装它的命令:
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
希望这对以后尝试标记日语单词的人有所帮助。