Spacy 日语分词器
Spacy Japanese Tokenizer
我正在尝试使用 Spacy 的日语分词器。
import spacy
Question= 'すぺいんへ いきました。'
nlp(Question.decode('utf8'))
我收到以下错误,
TypeError: Expected unicode, got spacy.tokens.token.Token
关于如何解决这个问题有什么想法吗?
谢谢!
试试这个:
import spacy
question = u'すぺいんへ いきました。'
nlp(question)
根据 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 Whosebug, 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', 'Whosebug::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 版本仍然是旧代码,上面的 link for 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 团队正在研究类似的输出来为日语构建模型,以便 "language specific" 也可以为日语构建,类似于其他语言的构建。
更新
写完之后,出于好奇,开始四处寻找。请检查udpipe
here, here & here
udpipe 似乎支持超过 50 种语言,就语言支持而言,它提供了我们在 Spacy 中看到的问题的解决方案。
我不确定你为什么会遇到那个特定的错误,但自从你发布这个问题后,日语支持得到了改进,它应该可以与最新版本的 spaCy 一起使用。对于日语支持,您还需要自己安装 MeCab 和其他一些依赖项,请参阅 here 了解详细指南。
实际代码如下所示:
import spacy
ja = spacy.blank('ja')
print(ja('日本語ですよ'))
如果您仍然遇到问题,请随时在 Github 上提出问题。
我正在尝试使用 Spacy 的日语分词器。
import spacy
Question= 'すぺいんへ いきました。'
nlp(Question.decode('utf8'))
我收到以下错误,
TypeError: Expected unicode, got spacy.tokens.token.Token
关于如何解决这个问题有什么想法吗?
谢谢!
试试这个:
import spacy
question = u'すぺいんへ いきました。'
nlp(question)
根据 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 Whosebug, 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', 'Whosebug::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 版本仍然是旧代码,上面的 link for 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 团队正在研究类似的输出来为日语构建模型,以便 "language specific" 也可以为日语构建,类似于其他语言的构建。
更新
写完之后,出于好奇,开始四处寻找。请检查udpipe here, here & here udpipe 似乎支持超过 50 种语言,就语言支持而言,它提供了我们在 Spacy 中看到的问题的解决方案。
我不确定你为什么会遇到那个特定的错误,但自从你发布这个问题后,日语支持得到了改进,它应该可以与最新版本的 spaCy 一起使用。对于日语支持,您还需要自己安装 MeCab 和其他一些依赖项,请参阅 here 了解详细指南。
实际代码如下所示:
import spacy
ja = spacy.blank('ja')
print(ja('日本語ですよ'))
如果您仍然遇到问题,请随时在 Github 上提出问题。