bash:install-japanese-nlp-spacy.sh
virtualenv .env
source .env/bin/activate
pip install -U janome jupyter
pip install -U Cython git+https://github.com/explosion/spaCy
pip freeze > .env/requirements.txt
pip spacy
だとちょっと古く、日本語サポートspacy.ja
が入っていなかったので、上記のようにpip install -U git+https://github.com/explosion/spaCy
で最新版をダウンロードし、ビルドしましょう。Cloud9が約30分ビルドに励んでくれました。
spaCyが無事インストールできたら、Jupyter Notebookを起動しましょう。 Cloud9なら:
sh:start-jupyter-c9.sh
jupyter notebook --port $PORT --ip $IP --no-browser
from janome.tokenizer import Tokenizer
tokenizer = Tokenizer()
def tokenize(text):
for token in tokenizer.tokenize(text):
print(token)
text1 = 'すもももももももものうち。'
text2 = '庭には鶏が2羽いる。'
text3 = 'にわにはニワトリがにわいる。'
texts = text1 + text2 + text3
tokenize(text1)
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ も 助詞,係助詞,*,*,*,*,も,モ,モ もも 名詞,一般,*,*,*,*,もも,モモ,モモ の 助詞,連体化,*,*,*,*,の,ノ,ノ うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ 。 記号,句点,*,*,*,*,。,。,。
tokenize(text2)
庭 名詞,一般,*,*,*,*,庭,ニワ,ニワ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ は 助詞,係助詞,*,*,*,*,は,ハ,ワ 鶏 名詞,一般,*,*,*,*,鶏,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 2 名詞,数,*,*,*,*,*,*,* 羽 名詞,接尾,助数詞,*,*,*,羽,ワ,ワ いる 動詞,自立,*,*,一段,基本形,いる,イル,イル 。 記号,句点,*,*,*,*,。,。,。
tokenize(text3)
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ わに 名詞,一般,*,*,*,*,わに,ワニ,ワニ は 助詞,係助詞,*,*,*,*,は,ハ,ワ ニワトリ 名詞,一般,*,*,*,*,ニワトリ,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ わい 動詞,自立,*,*,五段・カ行イ音便,連用タ接続,わく,ワイ,ワイ る 動詞,非自立,*,*,一段,基本形,る,ル,ル 。 記号,句点,*,*,*,*,。,。,。
tokenize('にわにはにわにわとりがいる')
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ わに 名詞,一般,*,*,*,*,わに,ワニ,ワニ はにわ 名詞,一般,*,*,*,*,はにわ,ハニワ,ハニワ にわとり 名詞,一般,*,*,*,*,にわとり,ニワトリ,ニワトリ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ いる 動詞,自立,*,*,一段,基本形,いる,イル,イル
from spacy.ja import Japanese
parser = Japanese()
def print_token(token):
print("==========================")
print("value:",token.orth_)
print("lemma:",token.lemma_) # lemma is the root of a word
print("shape:",token.shape_) # shape is capitalization and punctuation
def spacy_parse(text):
tokens = parser(text)
tokens_orth = [token.orth_ for token in tokens]
print(tokens_orth)
for token in tokens:
print_token(token)
spacy_parse(text1)
['すもも', 'も', 'もも', 'も', 'もも', 'の', 'うち', '。'] ========================== value: すもも lemma: shape: xxx ========================== value: も lemma: shape: x ========================== value: もも lemma: shape: xx ========================== value: も lemma: shape: x ========================== value: もも lemma: shape: xx ========================== value: の lemma: shape: x ========================== value: うち lemma: shape: xx ========================== value: 。 lemma: shape: 。
spacy_parse(text2)
['庭', 'に', 'は', '鶏', 'が', '2', '羽', 'いる', '。'] ========================== value: 庭 lemma: shape: x ========================== value: に lemma: shape: x ========================== value: は lemma: shape: x ========================== value: 鶏 lemma: shape: x ========================== value: が lemma: shape: x ========================== value: 2 lemma: shape: d ========================== value: 羽 lemma: shape: x ========================== value: いる lemma: shape: xx ========================== value: 。 lemma: shape: 。
spacy_parse(text3) #イマイチ
['に', 'わに', 'は', 'ニワトリ', 'が', 'に', 'わい', 'る', '。'] ========================== value: に lemma: shape: x ========================== value: わに lemma: shape: xx ========================== value: は lemma: shape: x ========================== value: ニワトリ lemma: shape: xxxx ========================== value: が lemma: shape: x ========================== value: に lemma: shape: x ========================== value: わい lemma: shape: xx ========================== value: る lemma: shape: x ========================== value: 。 lemma: shape: 。
spacy_parse(texts)
['すもも', 'も', 'もも', 'も', 'もも', 'の', 'うち', '。', '庭', 'に', 'は', '鶏', 'が', '2', '羽', 'いる', '。', 'に', 'わに', 'は', 'ニワトリ', 'が', 'に', 'わい', 'る', '。'] ========================== value: すもも lemma: shape: xxx ========================== value: も lemma: shape: x ========================== value: もも lemma: shape: xx ========================== value: も lemma: shape: x ========================== value: もも lemma: shape: xx ========================== value: の lemma: shape: x ========================== value: うち lemma: shape: xx ========================== value: 。 lemma: shape: 。 ========================== value: 庭 lemma: shape: x ========================== value: に lemma: shape: x ========================== value: は lemma: shape: x ========================== value: 鶏 lemma: shape: x ========================== value: が lemma: shape: x ========================== value: 2 lemma: shape: d ========================== value: 羽 lemma: shape: x ========================== value: いる lemma: shape: xx ========================== value: 。 lemma: shape: 。 ========================== value: に lemma: shape: x ========================== value: わに lemma: shape: xx ========================== value: は lemma: shape: x ========================== value: ニワトリ lemma: shape: xxxx ========================== value: が lemma: shape: x ========================== value: に lemma: shape: x ========================== value: わい lemma: shape: xx ========================== value: る lemma: shape: x ========================== value: 。 lemma: shape: 。