中国語
英語
「Oracle Bone Classical Chinese」を意味するAは、古代中国の加工に焦点を当てたNLPツールキットです。
現在、一般的な中国のNLPツールは、主に現代中国語をコアコーパスとして使用しており、古代中国語の処理効果は満足のいくものではありません(詳細については分詞を参照)。このプロジェクトの当初の意図は、古代中国の情報の処理を支援し、古代の文化的鉱物を掘り出して古典的な中国の素材をよりよく分析し、活用して「文化遺産」から「新しい文化製品」を作成することに興味がある古代中国の学者や愛好家を支援することです。
現在のバージョンは、レキシコン構造、自動単語セグメンテーション、スピーチの一部のアニテーション、古典的な中国の文の読み取り、句読点の5つの機能をサポートしています。
$ pip install jiayan
$ pip install https://github.com/kpu/kenlm/archive/master.zip
次のモジュールは、examples.pyから使用されています。
モデルをダウンロードして減圧:baidu netdisk、抽出コード: p0sc
シソーラスの建設
from jiayan import PMIEntropyLexiconConstructor
constructor = PMIEntropyLexiconConstructor()
lexicon = constructor.construct_lexicon('庄子.txt')
constructor.save(lexicon, '庄子词库.csv')
結果:
Word,Frequency,PMI,R_Entropy,L_Entropy
之,2999,80,7.944909328101839,8.279435615456894
而,2089,80,7.354575005231323,8.615211168836439
不,1941,80,7.244331150611089,6.362131306822925
...
天下,280,195.23602384978196,5.158574399464853,5.24731990592901
圣人,111,150.0620531154239,4.622606551534004,4.6853474419338585
万物,94,377.59805590304126,4.5959107835319895,4.538837960294887
天地,92,186.73504238078462,3.1492586603863617,4.894533538722486
孔子,80,176.2550051738876,4.284638190120882,2.4056390622295662
庄子,76,169.26227942514097,2.328252899085616,2.1920058354921066
仁义,58,882.3468468468468,3.501609497059026,4.96900162987599
老聃,45,2281.2228260869565,2.384853500510039,2.4331958387289765
...
分詞
キャラクターレベルの隠しマルコフモデルワード分詞、効果は言語の感覚に沿っています。使用することをお勧めし、言語モデルjiayan.klmをロードする必要があります
from jiayan import load_lm
from jiayan import CharHMMTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
lm = load_lm('jiayan.klm')
tokenizer = CharHMMTokenizer(lm)
print(list(tokenizer.tokenize(text)))
結果:
['是', '故', '内圣外王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
古代中国人には公共の単語セグメンテーションデータがないため、効果を評価することは不可能ですが、さまざまなNLPツールを使用してこのプロジェクトの利点を直感的に感じることができます。
LTP(3.4.0)モデル分詞の結果を比較してみてください。
['是', '故内', '圣外王', '之', '道', ',', '暗而不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉以自为方', '。']
HANLPワード分詞の結果をもう一度比較してみてください。
['是故', '内', '圣', '外', '王之道', ',', '暗', '而', '不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各为其所欲焉', '以', '自为', '方', '。']
古代中国語に対するこのツールの単語分詞効果は、一般的な中国のNLPツールよりもかなり優れていることがわかります。
*更新:HANLPの著者HANKCに感謝してくれたことに感謝します。大規模なコーパスでの事前に訓練された言語モデルの使用により、これらのコーパスはすでにインターネット上にほぼすべての古代および現代の中国人が含まれているため、古代中国人への影響は質的に改善されています。分詞単語だけでなく、ショットの一部の学習効果とセマンティック分析もあります。対応する特定の単語分詞効果については、この問題を参照してください。
単語レベルの最大確率パス分詞、基本的には文字の単位で、粗い粒サイズの単位
from jiayan import WordNgramTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
tokenizer = WordNgramTokenizer()
print(list(tokenizer.tokenize(text)))
結果:
['是', '故', '内', '圣', '外', '王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
音声注釈の一部
from jiayan import CRFPOSTagger
words = ['天下', '大乱', ',', '贤圣', '不', '明', ',', '道德', '不', '一', ',', '天下', '多', '得', '一', '察', '焉', '以', '自', '好', '。']
postagger = CRFPOSTagger()
postagger.load('pos_model')
print(postagger.postag(words))
結果:
['n', 'a', 'wp', 'n', 'd', 'a', 'wp', 'n', 'd', 'm', 'wp', 'n', 'a', 'u', 'm', 'v', 'r', 'p', 'r', 'a', 'wp']
壊れた文
from jiayan import load_lm
from jiayan import CRFSentencizer
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
sentencizer = CRFSentencizer(lm)
sentencizer.load('cut_model')
print(sentencizer.sentencize(text))
結果:
['天下大乱', '贤圣不明', '道德不一', '天下多得一察焉以自好', '譬如耳目', '皆有所明', '不能相通', '犹百家众技也', '皆有所长', '时有所用', '虽然', '不该不遍', '一之士也', '判天地之美', '析万物之理', '察古人之全', '寡能备于天地之美', '称神之容', '是故内圣外王之道', '暗而不明', '郁而不发', '天下之人各为其所欲焉以自为方', '悲夫', '百家往而不反', '必不合矣', '后世之学者', '不幸不见天地之纯', '古之大体', '道术将为天下裂']
句読点
from jiayan import load_lm
from jiayan import CRFPunctuator
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
punctuator = CRFPunctuator(lm, 'cut_model')
punctuator.load('punc_model')
print(punctuator.punctuate(text))
結果:天下大乱,贤圣不明,道德不一,天下多得一察焉以自好,譬如耳目,皆有所明,不能相通,犹百家众技也,皆有所长,时有所用,虽然,不该不遍,一之士也,判天地之美,析万物之理,察古人之全,寡能备于天地之美,称神之容,是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方,悲夫!百家往而不反,必不合矣,后世之学者,不幸不见天地之纯,古之大体,道术将为天下裂。
Jiayanは、Oracle Bonesに刻まれた漢字を意味しますが、古典的な中国語向けのプロのPython NLPツールです。
一般的な中国のNLPツールは、主に現代の中国のデータについて訓練されており、古典的な中国語でのパフォーマンスが低下します(トークン化を参照)。このプロジェクトの目的は、古典的な中国の情報処理を支援することです。
現在のバージョンは、レキシコンの建設、トークン化、POSタグ付け、文のセグメンテーション、自動句読点をサポートします。より多くの機能が開発されています。
$ pip install jiayan
$ pip install https://github.com/kpu/kenlm/archive/master.zip
以下の使用コードはすべてexamples.pyからです。
モデルをダウンロードして、それらを解凍します:Googleドライブ
レキシコン建設
from jiayan import PMIEntropyLexiconConstructor
constructor = PMIEntropyLexiconConstructor()
lexicon = constructor.construct_lexicon('庄子.txt')
constructor.save(lexicon, 'Zhuangzi_Lexicon.csv')
結果:
Word,Frequency,PMI,R_Entropy,L_Entropy
之,2999,80,7.944909328101839,8.279435615456894
而,2089,80,7.354575005231323,8.615211168836439
不,1941,80,7.244331150611089,6.362131306822925
...
天下,280,195.23602384978196,5.158574399464853,5.24731990592901
圣人,111,150.0620531154239,4.622606551534004,4.6853474419338585
万物,94,377.59805590304126,4.5959107835319895,4.538837960294887
天地,92,186.73504238078462,3.1492586603863617,4.894533538722486
孔子,80,176.2550051738876,4.284638190120882,2.4056390622295662
庄子,76,169.26227942514097,2.328252899085616,2.1920058354921066
仁义,58,882.3468468468468,3.501609497059026,4.96900162987599
老聃,45,2281.2228260869565,2.384853500510039,2.4331958387289765
...
トークン化
キャラクターベースのうーん、推奨される、ニーズ言語モデル: jiayan.klm
from jiayan import load_lm
from jiayan import CharHMMTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
lm = load_lm('jiayan.klm')
tokenizer = CharHMMTokenizer(lm)
print(list(tokenizer.tokenize(text)))
結果:
['是', '故', '内圣外王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
古典的な中国語の公共の象徴的なデータがないため、パフォーマンス評価を直接行うのは困難です。ただし、結果を他の人気のあるモダン中国のNLPツールと比較して、パフォーマンスを確認できます。
LTP(3.4.0)の象徴的な結果を比較してください。
['是', '故内', '圣外王', '之', '道', ',', '暗而不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉以自为方', '。']
また、HANLPのトークン化結果を比較してください。
['是故', '内', '圣', '外', '王之道', ',', '暗', '而', '不明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各为其所欲焉', '以', '自为', '方', '。']
Jiayanは、一般的な中国のNLPツールよりもはるかに優れたトークンパフォーマンスを持っていることは明らかです。
単語に基づいてトークン化に近づく最大確率パス
from jiayan import WordNgramTokenizer
text = '是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方。'
tokenizer = WordNgramTokenizer()
print(list(tokenizer.tokenize(text)))
結果:
['是', '故', '内', '圣', '外', '王', '之', '道', ',', '暗', '而', '不', '明', ',', '郁', '而', '不', '发', ',', '天下', '之', '人', '各', '为', '其', '所', '欲', '焉', '以', '自', '为', '方', '。']
POSタグ付け
from jiayan import CRFPOSTagger
words = ['天下', '大乱', ',', '贤圣', '不', '明', ',', '道德', '不', '一', ',', '天下', '多', '得', '一', '察', '焉', '以', '自', '好', '。']
postagger = CRFPOSTagger()
postagger.load('pos_model')
print(postagger.postag(words))
結果:
['n', 'a', 'wp', 'n', 'd', 'a', 'wp', 'n', 'd', 'm', 'wp', 'n', 'a', 'u', 'm', 'v', 'r', 'p', 'r', 'a', 'wp']
文のセグメンテーション
from jiayan import load_lm
from jiayan import CRFSentencizer
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
sentencizer = CRFSentencizer(lm)
sentencizer.load('cut_model')
print(sentencizer.sentencize(text))
結果:
['天下大乱', '贤圣不明', '道德不一', '天下多得一察焉以自好', '譬如耳目', '皆有所明', '不能相通', '犹百家众技也', '皆有所长', '时有所用', '虽然', '不该不遍', '一之士也', '判天地之美', '析万物之理', '察古人之全', '寡能备于天地之美', '称神之容', '是故内圣外王之道', '暗而不明', '郁而不发', '天下之人各为其所欲焉以自为方', '悲夫', '百家往而不反', '必不合矣', '后世之学者', '不幸不见天地之纯', '古之大体', '道术将为天下裂']
句読点
from jiayan import load_lm
from jiayan import CRFPunctuator
text = '天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也皆有所长时有所用虽然不该不遍一之士也判天地之美析万物之理察古人之全寡能备于天地之美称神之容是故内圣外王之道暗而不明郁而不发天下之人各为其所欲焉以自为方悲夫百家往而不反必不合矣后世之学者不幸不见天地之纯古之大体道术将为天下裂'
lm = load_lm('jiayan.klm')
punctuator = CRFPunctuator(lm, 'cut_model')
punctuator.load('punc_model')
print(punctuator.punctuate(text))
結果:天下大乱,贤圣不明,道德不一,天下多得一察焉以自好,譬如耳目,皆有所明,不能相通,犹百家众技也,皆有所长,时有所用,虽然,不该不遍,一之士也,判天地之美,析万物之理,察古人之全,寡能备于天地之美,称神之容,是故内圣外王之道,暗而不明,郁而不发,天下之人各为其所欲焉以自为方,悲夫!百家往而不反,必不合矣,后世之学者,不幸不见天地之纯,古之大体,道术将为天下裂。