Aha Natural Language Processing Packageは、 HANLP 、 Word2Vec 、 Mate-Tools 、その他のプロジェクトを統合し、高品質の中国の自然言語処理サービスを提供します。
AHANLPが提供する現在の関数は次のとおりです。
ahanlp.jarの最新バージョンと対応する基本データパケットahanlp_baseは、ダウンロードするにはここをクリックしてください。構成ファイルahanlp.propertiesおよびhanlp.propertiesはclasspathに配置されます。ほとんどのプロジェクトでは、SRCディレクトリに配置するだけです。 IDEは、コンピレーション中にClassPathに自動的にコピーします。
AHANLPは、HANLPのデータ組織構造、コード、およびデータ分離に従います。ユーザーは、対応するデータパケットを選択して、ニーズに応じてダウンロードできます。
dictionaryディレクトリとmodelディレクトリはプロジェクトのdata/ディレクトリに保存されます。data/model/ディレクトリに保存してください。python -m pip install xxx.whlを使用)。次に、Word_Cloud(抽出コード9JB6)をダウンロードし、抽出されたword_cloudフォルダーをProject Root Directoryに配置します。AHANLPプロジェクトのすべてのパラメーターは、構成ファイルから読み取られます(ユーザーの変更は推奨されません)。以下は簡単な説明です。
メイン構成ファイルはahanlp.propertiesで、Word2vecモデルパスを構成する必要があり、デフォルトは
word2vecModel = data/model/wiki_chinese_word2vec(Google).model
hanLDAModel = data/model/SogouCS_LDA.model
srlTaggerModel = data/model/srl/CoNLL2009-ST-Chinese-ALL.anna-3.3.postagger.model
srlParserModel = data/model/srl/CoNLL2009-ST-Chinese-ALL.anna-3.3.parser.model
srlModel = data/model/srl/CoNLL2009-ST-Chinese-ALL.anna-3.3.srl-4.1.srl.model
wordCloudPath = word_cloud/
pythonCMD = python
HANLP構成ファイルはhanlp.propertiesです。データディレクトリが最初の行にあるパスを設定する必要があります。デフォルトはです
root=./
注:セマンティックロールラベルモジュールのメモリフットプリントは高いです。この機能を使用する場合は、JVMの最大メモリフットプリントを4GBに設定してください。
AHANLPのほぼすべての機能は、ツールクラスAHANLPを介して迅速に呼び出すことができます。また、ユーザーは常にツールクラスAHANLPを介して呼び出すことをお勧めします。これにより、AHANLPが将来アップグレードされた後、ユーザーは呼び出しコードを変更する必要がありません。
すべてのデモはtest.demoの下にあり、以下の紹介文書よりも詳細をカバーしています。一度実行することを強くお勧めします。また、チェックアウトすることもできます。
AHANLPインターフェイスドキュメント。
String content = "苏州大学的周国栋教授正在教授自然语言处理课程。" ;
// 标准分词
List < Term > stdSegResult = AHANLP . StandardSegment ( content );
System . out . println ( stdSegResult );
//[苏州大学/ntu, 的/ude1, 周/qt, 国栋/nz, 教授/nnt, 正在/d, 教授/nnt, 自然语言处理/nz, 课程/n, 。/w]
// NLP分词
List < Term > nlpSegResult = AHANLP . NLPSegment ( content );
System . out . println ( nlpSegResult );
//[苏州大学/ntu, 的/u, 周国栋/nr, 教授/n, 正在/d, 教授/v, 自然语言处理/nz, 课程/n, 。/w]標準セグメントは、HMM-Bigramモデルをカプセル化し、最も短い回路法を使用して単語を分割します(最も短い回路ソリューションはViterbiアルゴリズムを使用します)。効率と効果の両方を考慮します。 NLP分詞(NLPSegment)は、構造化されたパーセプトロンシーケンスラベル付けフレームワークによってサポートされるPerceptronモデルをカプセル化し、生産環境での使用に適した精度が高く、エンティティ認識の一部を同時に実行します。
単語分詞のデフォルトの返品結果には、単語と音声の一部が含まれています。それぞれAHANLP.getWordList(stdSegResult)とAHANLP.getNatureList(stdSegResult)によってスピーチリストの単語または一部を取得できます。スピーチの一部のアニットについては、「HANLPのスピーチの一部のAnnotation Collection」を参照してください。
一部のスピーチフィルタリングをカスタマイズする必要がある場合は、 me.xiaosheng.chnlp.seg.POSFilterクラスを使用できます。これは、句読点のフィルタリングや実際の単語の保持などの一般的な方法も実装しています。
// 过滤标点
POSFilter . removePunc ( stdSegResult );
// 保留名词
POSFilter . selectPOS ( stdSegResult , Arrays . asList ( "n" , "ns" , "nr" , "nt" , "nz" ));上記の単語分詞は、停止単語のフィルタリングをサポートしています。2番目のパラメーターを持ち込み、それを真に設定します。
List < Term > stdSegResult = AHANLP . NLPSegment ( content , true );
List < String > stdWordList = AHANLP . getWordList ( stdSegResult );
System . out . println ( stdWordList );
//[苏州大学, 周国栋, 教授, 正在, 教授, 自然语言处理, 课程]単語セグメンテーションは、ユーザー定義の辞書をサポートしています。 HANLPは、 CustomDictionaryクラスを使用してそれを表現します。これは、すべての語彙マシンに影響を与えるグローバルユーザー定義の辞書です。辞書のテキストパスは、 data/dictionary/custom/CustomDictionary.txtです。ここでは、ユーザーは独自の単語を追加できます(推奨されません)。また、新しいテキストファイルを個別に作成し、構成ファイルCustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 我的词典.txt; (推奨)。
辞書形式:
[单词] [词性A] [A的频次] [词性B] [B的频次] ...に従います。全国地名大全.txt ns;空間の後に音声の部分が続く場合、すぐに音声の部分が続く場合、辞書はデフォルトで音声の部分になります。**注:**プログラムは、デフォルトでキャッシュファイル(filename.txt.binまたはfilename.trie.dat and filename.txt.trie.value)から辞書を読み取ります。辞書を変更すると、キャッシュの削除のみが有効になります。
List < List < Term >> segResults = AHANLP . seg2sentence ( "Standard" , content , true );
for ( int i = 0 ; i < senList . size (); i ++)
System . out . println (( i + 1 ) + " : " + AHANLP . getWordList ( results . get ( i )));長いテキストの文で単語を分割することも一般的な使用であり、単語分詞のすべての文で構成される結果のリストを返します。単語セグメルターのタイプは、最初のSEGTYPEパラメーターを介して制御されます。「標準」は標準の単語セグメントに対応し、「NLP」はNLP分詞に対応します。
もちろん、文章を手動で壊してから、複数の文に分割することもできます。
List < String > senList = AHANLP . splitSentence ( content );
List < List < Term >> senWordList = AHANLP . splitWordInSentences ( "Standard" , senList , true );
for ( int i = 0 ; i < senWordList . size (); i ++)
System . out . println (( i + 1 ) + " : " + senWordList . get ( i )); String sentence = "2013年9月,习近平出席上合组织比什凯克峰会和二十国集团圣彼得堡峰会,"
+ "并对哈萨克斯坦等中亚4国进行国事访问。在“一带一路”建设中,这次重大外交行程注定要被历史铭记。" ;
List < NERTerm > NERResult = AHANLP . NER ( sentence );
System . out . println ( NERResult );
//[中亚/loc, 习近平/per, 上合组织/org, 二十国集团/org, 哈萨克斯坦/loc, 比什凯克/loc, 圣彼得堡/loc, 2013年9月/time] PerceptronおよびCRFモデルは、構造化されたPerceptronシーケンスラベル付けフレームワークによってサポートされているカプセル化されており、テキスト内のtime 、 per 、 loc名、およびorg名が識別されます。
String sentence = "北京是中国的首都" ;
CoNLLSentence deps = AHANLP . DependencyParse ( sentence );
for ( CoNLLWord dep : deps )
System . out . printf ( "%s --(%s)--> %s n " , dep . LEMMA , dep . DEPREL , dep . HEAD . LEMMA );
/*
北京 --(主谓关系)--> 是
是 --(核心关系)--> ##核心##
中国 --(定中关系)--> 首都
的 --(右附加关系)--> 中国
首都 --(动宾关系)--> 是
*/
// 词语依存路径
List < List < Term >> wordPaths = AHANLP . getWordPathsInDST ( sentence );
for ( List < Term > wordPath : wordPaths ) {
System . out . println ( wordPath . get ( 0 ). word + " : " + AHANLP . getWordList ( wordPath ));
}
/*
北京 : [北京, 是]
是 : [是]
中国 : [中国, 首都, 是]
的 : [的, 中国, 首都, 是]
首都 : [首都, 是]
*/
// 依存句法树前2层的词语
List < String > words = AHANLP . getTopWordsInDST ( sentence , 1 );
System . out . println ( words );
// [北京, 是, 首都]依存関係構文分析は、ニューラルネットワークに基づく高性能依存関係構文分析器を使用して、HANLPのNeuralNetWorkDependencyParserのカプセル化です。分析結果はconll形式であり、conllwordタイプに応じて反復できます。上記のように、 CoNLLWord.LEMMAは奴隷の単語であり、 CoNLLWord.HEAD.LEMMA支配的な単語であり、 CoNLLWord.DEPREL依存ラベルであり、デフォルトは中国のラベルにデフォルトです。
英語のラベルを使用する必要がある場合は、2番目のパラメーターを持参してtrueに設定するだけです
CoNLLSentence enDeps = AHANLP.DependencyParse(sentence, true);
依存関係タグの詳細な説明については、「依存関係タグ」を参照してください。
String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" ;
List < String > wordList = AHANLP . extractKeyword ( document , 5 );
System . out . println ( wordList );
//[航空母舰, 动力, 建造, 牵引, 完成]extractKeyWord関数は、2番目のパラメーターから返されるキーワードの数を設定します。各単語のランク値は、Textrankアルゴリズムを介して内部的に計算され、ランク値の下降順序で配置され、以前の少数をキーワードとして抽出します。特定の原則については、「Textrankアルゴリズム抽出キーワードと要約」を参照してください。
String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。"
+ "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
+ "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
+ "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。" ;
List < String > senList = AHANLP . extractKeySentence ( document , 5 );
System . out . println ( "Key Sentences: " );
for ( int i = 0 ; i < senList . size (); i ++)
System . out . println (( i + 1 ) + " : " + senList . get ( i ));
System . out . println ( "Summary: " );
System . out . println ( AHANLP . extractSummary ( document , 50 ));
/*
Key Sentences:
1 : 航空母舰主船体完成建造
2 : 该航空母舰将按计划进行系统设备调试和舾装施工
3 : 我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行
4 : 标志着我国自主设计建造航空母舰取得重大阶段性成果
5 : 出坞下水是航空母舰建设的重大节点之一
Summary:
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰主船体完成建造。
*/抽出キーシェンセンス関数は重要な文の抽出に関与し、2番目のパラメーターは抽出された主要な文の数を制御します。 ExtractSummary関数は自動要約の原因であり、2番目のパラメーターは概要ワードカウントの上限を設定します。各文のランク値は、Textrankアルゴリズムを介して内部的に計算され、ランク値の降順で配置され、以前の数を重要な文として抽出します。自動概要は似ており、元のテキストの文の位置と文の長さも考慮します。特定の原則については、「Textrankアルゴリズム抽出キーワードと要約」を参照してください。
文間の類似性の程度(つまり、テキストランクアルゴリズムの重み)は、Word2Vecが提供する関数を使用して計算されます。ウィキペディアの中国のコーパスで訓練されたモデルはデフォルトで使用されており、カスタムモデルも使用できます。
System . out . println ( "猫 | 狗 : " + AHANLP . wordSimilarity ( "猫" , "狗" ));
System . out . println ( "计算机 | 电脑 : " + AHANLP . wordSimilarity ( "计算机" , "电脑" ));
System . out . println ( "计算机 | 男人 : " + AHANLP . wordSimilarity ( "计算机" , "男人" ));
String s1 = "苏州有多条公路正在施工,造成局部地区汽车行驶非常缓慢。" ;
String s2 = "苏州最近有多条公路在施工,导致部分地区交通拥堵,汽车难以通行。" ;
String s3 = "苏州是一座美丽的城市,四季分明,雨量充沛。" ;
System . out . println ( "s1 | s1 : " + AHANLP . sentenceSimilarity ( s1 , s1 ));
System . out . println ( "s1 | s2 : " + AHANLP . sentenceSimilarity ( s1 , s2 ));
System . out . println ( "s1 | s3 : " + AHANLP . sentenceSimilarity ( s1 , s3 ));
/*
猫 | 狗 : 0.71021223
计算机 | 电脑 : 0.64130974
计算机 | 男人 : -0.013071457
s1 | s1 : 1.0
s1 | s2 : 0.6512632
s1 | s3 : 0.3648093
*/単語と文化性は、それぞれ単語と文の類似性を計算する関数です。計算プロセスは、Word2Vecモデルによって事前に訓練された単語ベクトルを使用します。使用する前に、Word2Vecモデルをダウンロードしてから、プロジェクトのdata/model/ディレクトリに減圧モデルファイルを保存する必要があります。単語の類似性は、単語ベクトルコサイン値を計算することにより直接計算されます。文の類似性を取得する方法については、Word2vec/Issues1を参照できます。 Word2Vecモデルを自分でトレーニングしたい場合は、モデルのGoogleバージョンのトレーニングを参照できます。
注: Sentencesimilarityは、標準の単語セグメンテーションを使用して、デフォルトで文をセグメント化し、停止単語をフィルタリングします。
String sentence = "全球最大石油生产商沙特阿美(Saudi Aramco)周三(7月21日)证实,公司的一些文件遭泄露。" ;
List < SRLPredicate > predicateList = AHANLP . SRL ( sentence );
for ( SRLPredicate p : predicateList ) {
System . out . print ( "谓词: " + p . getPredicate ());
System . out . print ( " t t句内偏移量: " + p . getLocalOffset ());
System . out . print ( " t句内索引: [" + p . getLocalIdxs ()[ 0 ] + ", " + p . getLocalIdxs ()[ 1 ] + "] n " );
for ( Arg arg : p . getArguments ()) {
System . out . print ( " t " + arg . getLabel () + ": " + arg . getSpan ());
System . out . print ( " t t句内偏移量: " + arg . getLocalOffset ());
System . out . print ( " t句内索引: [" + arg . getLocalIdxs ()[ 0 ] + ", " + arg . getLocalIdxs ()[ 1 ] + "] n " );
}
System . out . println ();
}
/*
谓词: 证实 句内偏移量: 36 句内索引: [36, 37]
TMP: 周三(7月21日) 句内偏移量: 27 句内索引: [27, 35]
A0: 全球最大石油生产商沙特阿美(Saudi Aramco) 句内偏移量: 0 句内索引: [0, 26]
A1: 公司的一些文件遭泄露 句内偏移量: 39 句内索引: [39, 48]
谓词: 遭 句内偏移量: 46 句内索引: [46, 46]
A0: 公司的一些文件 句内偏移量: 39 句内索引: [39, 45]
A1: 泄露 句内偏移量: 47 句内索引: [47, 48]
*/ MATE-TOOLS A1一部のスピーチ認識機と従属構文アナライザーTMP含むA0のSRLコンポーネントは、テキストのpredicateと対応する引数LOC識別できます。長いテキストsrlparsecontent(content)および一致するテキストオフセットのサポートを追加しました。これは、テキスト内の述語と議論の位置とオフセットを介して配置できます。
注:各述語は、特定のカテゴリの複数の引数に対応しています。たとえば、述語「攻撃」は複数のアクティベーターA0(攻撃者)に対応できます。
int topicNum510 = AHANLP . topicInference ( "data/mini/军事_510.txt" );
System . out . println ( "军事_510.txt 最可能的主题号为: " + topicNum510 );
int topicNum610 = AHANLP . topicInference ( "data/mini/军事_610.txt" );
System . out . println ( "军事_610.txt 最可能的主题号为: " + topicNum610 );LDAトピック予測デフォルトでは、ニュースLDAモデルを使用してトピックを予測し、最大確率のトピック数は出力です。デフォルトのモデルは、Sogou News Corpus(SoGoucs)の各カテゴリからの1,000(おそらく不満)ニュースからトレーニングされ、合計100のトピックがあります。
ユーザーは、 ZHNLP.trainLDAModel()を介してLDAモデルを自分でトレーニングすることもできます。トレーニング後、彼らはそれをロードするためにオーバーロードされたtopicInferenceメソッドを使用できます。
AHANLP . trainLDAModel ( "data/mini/" , 10 , "data/model/testLDA.model" );
int topicNum710 = AHANLP . topicInference ( "data/model/testLDA.model" , "data/mini/军事_710.txt" );
System . out . println ( "军事_710.txt 最可能的主题号为: " + topicNum710 );
int topicNum810 = AHANLP . topicInference ( "data/model/testLDA.model" , "data/mini/军事_810.txt" );
System . out . println ( "军事_810.txt 最可能的主题号为: " + topicNum810 );テストのためにldademo.javaを実行する必要がある場合は、sogouca_miniをダウンロードして、抽出されたminiフォルダーをプロジェクトのdata/ディレクトリに保存する必要があります。
String tc = AHANLP . convertSC2TC ( "用笔记本电脑写程序" );
System . out . println ( tc );
String sc = AHANLP . convertTC2SC ( "「以後等妳當上皇后,就能買士多啤梨慶祝了」" );
System . out . println ( sc );
/*
用筆記本電腦寫程序
“以后等你当上皇后,就能买草莓庆祝了”
*/シンプルで伝統的な中国の回心は、HANLPでconvertToTraditionalChinese 、中国の方法を変換し、 convertToSimplifiedChinese方法を変換するためのラッパーです。打印机=印表機など、単純な中国人と伝統的な中国語の間で分割されている単語を識別できます。そして、「年」と「Queen」の2つの「年」など、シンプルで伝統的な中国の変換ツールで区別できない多くのキャラクター。
String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
+ "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
+ "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
+ "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
+ "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。" ;
List < String > wordList = AHANLP . getWordList ( AHANLP . StandardSegment ( document , true ));
WordCloud wc = new WordCloud ( wordList );
try {
wc . createImage ( "D: \ test.png" );
} catch ( IOException e ) {
e . printStackTrace ();
} WordCloudは単語リストを使用してWordCloudオブジェクトを作成し、 createImageメソッドを呼び出して単語クラウド画像を作成し、画像の保存されたアドレスをパラメーターとして渡します。クラウドという単語は、単語の頻度に応じて各単語のサイズを描画します。単語の周波数が高いほど、単語が大きくなります。色と位置はランダムに生成されます。

デフォルトの生成された画像サイズは500x400で、背景色は白です。画像の背景色と画像サイズをカスタマイズすることもできます
WordCloud wc = new WordCloud ( wordList );
wc . createImage ( "D: \ test_black.png" , true ); // 黑色背景
wc . createImage ( "D: \ test_1000x800.png" , 1000 , 800 ); // 尺寸 1000x800
wc . createImage ( "D: \ test_1000x800_black.png" , 1000 , 800 , true ); // 尺寸 1000x800, 黑色背景次のプロジェクトの著者に敬意を表したいと思います。これは、自然言語加工技術の普及と応用を促進するこれらのオープンソースソフトウェアです。