我正在尝试使用Spacy的日语标记器,如下所示。
import spacy
Question= 'すぺいんへ いきました。'
nlp(Question.decode('utf8'))
我收到以下错误,
TypeError:预期的unicode,得到了spacy.tokens.token.Token
有关如何解决此问题的任何想法?
谢谢!
答案 0 :(得分:1)
尝试使用:
import spacy
Question= u'すぺいんへ いきました。'
nlp(Question)
答案 1 :(得分:1)
根据Spacy的说法,使用spacy的日语标记化仍然在alpha phase。 标记化的理想方式是提供标记化的单词列表,其中还包含与语言结构有关的信息。例如,对于英语句子,您可以尝试这个
import spacy
nlp = spacy.load("en") # execute "python -m spacy download en" before this on standard console
sentence = "Writing some answer on stackoverflow, as an example for spacy language model"
print(["::".join((word.orth_, word.pos_)) for word in nlp(sentence)])
## <OUTPUT>
## ['Writing::VERB', 'some::DET', 'answer::NOUN', 'on::ADP', 'stackoverflow::NOUN', ',::PUNCT', 'as::ADP', 'an::DET', 'example::NOUN', 'for::ADP', 'spacy::ADJ', 'language::NOUN', 'model::NOUN']
此类结果目前无法用于日语。
如果您使用python -m spacy download xx
并使用nlp = spacy.load("xx")
,则最好了解named entities
另外,如果您在here查看spacy的源代码,您会看到该标记化可用,但它只带来make_doc
函数,这非常天真。
注意:spacy的pip版本仍然是旧代码,github的上述链接仍然有一些最新的代码。
因此,对于构建标记化,强烈建议使用janome 下面给出了一个例子
from janome.tokenizer import Tokenizer as janome_tokenizer
sentence = "日本人のものと見られる、延べ2億件のメールアドレスとパスワードが闇サイトで販売されていたことがわかりました。過去に漏えいしたデータを集めたものと見られ、調査に当たったセキュリティー企業は、日本を狙ったサイバー攻撃のきっかけになるおそれがあるとして注意を呼びかけています。"
token_object = janome_tokenizer()
[x.surface for x in token_object.tokenize(sentence)]
## <OUTPUT> ##
## ['日本人', 'の', 'もの', 'と', '見', 'られる', '、', '延べ', '2', '億', '件', 'の', 'メールアドレス', 'と', 'パスワード', 'が', '闇', 'サイト', 'で', '販売', 'さ', 'れ', 'て', 'い', 'た', 'こと', 'が', 'わかり', 'まし', 'た', '。', '過去', 'に', '漏えい', 'し', 'た', 'データ', 'を', '集め', 'た', 'もの', 'と', '見', 'られ', '、', '調査', 'に', '当たっ', 'た', 'セキュリティー', '企業', 'は', '、', '日本', 'を', '狙っ', 'た', 'サイバー', '攻撃', 'の', 'きっかけ', 'に', 'なる', 'お', 'それ', 'が', 'ある', 'として', '注意', 'を', '呼びかけ', 'て', 'い', 'ます', '。']
## you can look at
## for x in token_object.tokenize(sentence):
## print(x)
## <OUTPUT LIKE>:
## 日本人 名詞,一般,*,*,*,*,日本人,ニッポンジン,ニッポンジン
## の 助詞,連体化,*,*,*,*,の,ノ,ノ
## もの 名詞,非自立,一般,*,*,*,もの,モノ,モノ
## と 助詞,格助詞,引用,*,*,*,と,ト,ト
## ....
## <OUTPUT Truncated>
我认为spacy团队正在研究类似的输出来构建日语模型,因此也可以为日语制作“特定于语言”的结构,类似于其他语言的结构。
更新
写完之后,出于好奇,我开始四处寻找。请检查udpipe here,here&amp; here 似乎udpipe支持超过50种语言,并且就语言支持而言,它为我们在Spacy中看到的问题提供了解决方案。
答案 2 :(得分:0)
我不确定为什么会遇到该特定错误,但是自从您发布此问题以来,日语支持已得到改善,它应该与最新版本的spaCy一起使用。对于日语支持,您还需要自己安装MeCab和其他依赖项,请参见here,以获取详细指南。
实际代码如下:
import spacy
ja = spacy.blank('ja')
print(ja('日本語ですよ'))
如果您仍然遇到问题,请随时在Github上提交问题。