Paket pemrosesan bahasa alami AHA mengintegrasikan HANLP , Word2VEC , MATE-Tools dan proyek lainnya, menyediakan layanan pemrosesan bahasa alami Cina berkualitas tinggi.
Fungsi saat ini yang disediakan oleh Ahanlp adalah:
Versi terbaru dari Ahanlp.jar dan paket data dasar yang sesuai Ahanlp_base , klik di sini untuk mengunduh. File konfigurasi Ahanlp.properties dan hanlp.properties dimasukkan ke dalam classpath. Untuk sebagian besar proyek, Anda hanya perlu menempatkannya di direktori SRC. IDE secara otomatis akan menyalinnya ke Classpath selama kompilasi.
Ahanlp mengikuti struktur organisasi data HANLP, kode dan pemisahan data. Pengguna dapat memilih paket data yang sesuai untuk diunduh sesuai dengan kebutuhan mereka:
dictionary dan direktori model disimpan dalam data/ direktori proyek.data/model/ direktori proyek.python -m pip install xxx.whl Setelah Mengunduh). Kemudian unduh Word_Cloud (Ekstrak kode 9JB6) dan letakkan folder word_cloud yang diekstraksi di direktori Root Proyek.Semua parameter dalam proyek AHANLP dibaca dari file konfigurasi (modifikasi pengguna tidak disarankan), dan berikut ini adalah deskripsi singkat.
File konfigurasi utama adalah ahanlp.properties , dan jalur model Word2vec perlu dikonfigurasi, dan defaultnya
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
File konfigurasi HANLP adalah hanlp.properties . Anda hanya perlu mengatur jalur di mana direktori data terletak di baris pertama. Standarnya adalah
root=./
Catatan: Modul pelabelan peran semantik memiliki jejak memori yang tinggi. Jika Anda ingin menggunakan fitur ini, silakan atur jejak memori maksimum JVM ke 4GB.
Hampir semua fungsi Ahanlp dapat dipanggil dengan cepat melalui kelas alat AHANLP . Juga disarankan agar pengguna selalu menelepon melalui kelas alat AHANLP, sehingga setelah Ahanlp ditingkatkan di masa mendatang, pengguna tidak perlu memodifikasi kode panggilan.
Semua demo terletak di bawah test.demo, mencakup lebih banyak detail daripada dokumen pengantar di bawah ini. Sangat disarankan untuk menjalankannya sekali, dan Anda juga dapat memeriksanya:
Dokumentasi antarmuka 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]Segmen standar merangkum model HMM-Bigram dan menggunakan metode sirkuit terpendek untuk membagi kata (solusi sirkuit terpendek menggunakan algoritma Viterbi), dengan mempertimbangkan efisiensi dan efek. NLP Participle (NLPSMENTE) merangkum model Perceptron, didukung oleh kerangka pelabelan urutan perseptron terstruktur, dan melakukan anotasi sebagian dan pengenalan entitas penamaan pada saat yang sama, dengan akurasi yang lebih tinggi dan cocok untuk digunakan dalam lingkungan produksi.
Hasil pengembalian default dari kata participle berisi kata dan bagian dari pidato. Anda dapat memperoleh kata atau bagian dari daftar ucapan oleh AHANLP.getWordList(stdSegResult) dan AHANLP.getNatureList(stdSegResult) masing -masing. Untuk anotasi bagian-of-speech, silakan merujuk ke "Koleksi Anotasi Bagian Hanlp".
Jika Anda perlu menyesuaikan penyaringan bagian-of-speech, Anda dapat menggunakan kelas me.xiaosheng.chnlp.seg.POSFilter , yang juga mengimplementasikan metode umum seperti menyaring tanda baca dan mempertahankan kata-kata nyata.
// 过滤标点
POSFilter . removePunc ( stdSegResult );
// 保留名词
POSFilter . selectPOS ( stdSegResult , Arrays . asList ( "n" , "ns" , "nr" , "nt" , "nz" ));Kata participle di atas mendukung penyaringan kata -kata berhenti, cukup bawa parameter kedua dan atur ke true.
List < Term > stdSegResult = AHANLP . NLPSegment ( content , true );
List < String > stdWordList = AHANLP . getWordList ( stdSegResult );
System . out . println ( stdWordList );
//[苏州大学, 周国栋, 教授, 正在, 教授, 自然语言处理, 课程] Segmentasi kata mendukung kamus yang ditentukan pengguna. Hanlp menggunakan kelas CustomDictionary untuk mewakilinya. Ini adalah kamus yang ditentukan pengguna global yang memengaruhi semua mesin kosa kata. Jalur teks kamus adalah data/dictionary/custom/CustomDictionary.txt , di mana pengguna dapat menambahkan kata -kata mereka sendiri (tidak disarankan). Anda juga dapat membuat file teks baru secara terpisah dan menambahkan kamus melalui file konfigurasi CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 我的词典.txt; (direkomendasikan).
Format Kamus:
[单词] [词性A] [A的频次] [词性B] [B的频次] ... jika bagian dari pidato tidak ditulis, itu berarti bahwa bagian default dari pidato diadopsi dalam kamus.全国地名大全.txt ns; Jika ruang diikuti oleh bagian dari pidato segera diikuti oleh bagian dari pidato, kamus default ke bagian pidato.** Catatan: ** Program membaca kamus dari file cache (filename.txt.bin atau filename.txt.trie.dat dan filename.txt.trie.value) secara default. Jika Anda memodifikasi kamus apa pun, hanya menghapus cache yang akan berlaku.
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 )));Partisi kata -kata dengan kalimat pada teks panjang juga merupakan penggunaan umum, dan mengembalikan daftar hasil yang terdiri dari semua kalimat kata participle. Jenis Segmenter Kata dikendalikan melalui parameter SegType pertama: "Standar" sesuai dengan segmen kata standar, dan "NLP" sesuai dengan NLP participle.
Tentu saja, Anda juga dapat melanggar kalimat secara manual dan kemudian membaginya menjadi beberapa kalimat.
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] Model Perceptron dan CRF dienkapsulasi, didukung oleh kerangka pelabelan urutan Perceptron terstruktur, dan waktu, nama tempat, nama orang, dan nama organisasi dalam teks diidentifikasi: nama orang per , nama tempat loc , nama organisasi org , dan time .
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 );
// [北京, 是, 首都] Analisis Sintaks Dependensi adalah enkapsulasi neuralnetworkDependencyparser di HANLP, menggunakan penganalisa sintaks ketergantungan berkinerja tinggi berdasarkan jaringan saraf. Hasil analisis dalam format CONLL, dan Anda dapat mengulangi sesuai dengan tipe Conllword. Seperti yang ditunjukkan di atas, CoNLLWord.LEMMA adalah kata slave, CoNLLWord.HEAD.LEMMA adalah kata dominan, dan CoNLLWord.DEPREL adalah label dependen, dan default ke label Cina.
Jika Anda perlu menggunakan label bahasa Inggris, cukup bawa parameter kedua dan atur ke true
CoNLLSentence enDeps = AHANLP.DependencyParse(sentence, true);
Untuk deskripsi terperinci tentang tag ketergantungan, silakan merujuk ke "Tag Ketergantungan".
String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" ;
List < String > wordList = AHANLP . extractKeyword ( document , 5 );
System . out . println ( wordList );
//[航空母舰, 动力, 建造, 牵引, 完成]Fungsi ExtractKeyWord menetapkan jumlah kata kunci yang dikembalikan melalui parameter kedua. Nilai peringkat dari setiap kata dihitung secara internal melalui algoritma Textrank, dan mengaturnya dalam urutan nilai peringkat, mengekstraksi beberapa kata kunci sebelumnya. Untuk prinsip -prinsip tertentu, silakan merujuk ke "kata kunci ekstraksi algoritma dan abstrak algoritma".
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日上午在中国船舶重工集团公司大连造船厂举行。航空母舰主船体完成建造。
*/Fungsi ekstrakkeysentence bertanggung jawab untuk mengekstraksi kalimat utama, dan parameter kedua mengontrol jumlah kalimat kunci yang diekstraksi. Fungsi ExtractSummary bertanggung jawab untuk ringkasan otomatis, dan parameter kedua menetapkan batas atas jumlah kata ringkasan. Nilai peringkat dari setiap kalimat dihitung secara internal melalui algoritma Textrank, dan mengaturnya dalam urutan nilai peringkat, mengekstraksi beberapa kalimat utama sebelumnya. Ringkasan otomatis serupa, dan juga mempertimbangkan posisi kalimat dalam teks asli dan panjang kalimat. Untuk prinsip -prinsip tertentu, silakan merujuk ke "kata kunci ekstraksi algoritma dan abstrak algoritma".
Tingkat kesamaan antara kalimat (mis., Bobot dalam algoritma Textrank) dihitung menggunakan fungsi yang disediakan oleh Word2Vec. Model yang dilatih dalam korpus Cina Wikipedia digunakan secara default, dan model khusus juga dapat digunakan.
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
*/ Kata -kata dan kalimat -kalimat adalah fungsi yang masing -masing menghitung kesamaan kata dan kalimat. Proses perhitungan menggunakan kata vektor yang pra-terlatih oleh model Word2VEC. Sebelum digunakan, Anda perlu mengunduh model Word2VEC, dan kemudian simpan file model yang didekompresi dalam data/model/ direktori proyek. Kesamaan kata secara langsung dihitung dengan menghitung nilai kata kosinus vektor. Anda dapat merujuk ke Word2Vec/Isues1 untuk mendapatkan kesamaan kalimat. Jika Anda ingin melatih model Word2Vec sendiri, Anda dapat merujuk pada pelatihan versi Google dari model.
CATATAN: KalimatSimilaritas menggunakan segmentasi kata standar untuk segmen kalimat secara default dan menyaring kata -kata berhenti.
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]
*/ Komponen SRL dalam alat-pasangan (termasuk pengenal bagian-of-speech dan penganalisa sintaks dependen) dapat mengidentifikasi predicate dalam teks dan argumen yang sesuai: agen A0 , penerima A1 , waktu TMP dan LOC lokasi. Dukungan tambahan untuk teks panjang srlparsecontent (konten) dan offset teks yang cocok, yang dapat diposisikan melalui posisi dan offset predikat dan argumen dalam teks.
Catatan: Setiap predikat sesuai dengan lebih dari satu argumen dalam kategori tertentu, misalnya, predikat "serangan" dapat sesuai dengan beberapa aktivator A0 (penyerang).
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 );Prediksi topik LDA Secara default, model LDA berita digunakan untuk memprediksi topik, dan nomor topik dengan probabilitas maksimum adalah output. Model default dilatih dari 1.000 (mungkin tidak puas) berita dari setiap kategori di Sogou News Corpus (Sogoucs), dengan total 100 topik.
Pengguna juga dapat melatih model LDA sendiri melalui ZHNLP.trainLDAModel() . Setelah pelatihan, mereka dapat menggunakan Metode topicInference yang kelebihan beban untuk memuatnya.
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 ); Jika Anda perlu menjalankan ldademo.java untuk pengujian, Anda juga perlu mengunduh sogouca_mini dan menyimpan folder mini yang diekstraksi di data/ direktori proyek.
String tc = AHANLP . convertSC2TC ( "用笔记本电脑写程序" );
System . out . println ( tc );
String sc = AHANLP . convertTC2SC ( "「以後等妳當上皇后,就能買士多啤梨慶祝了」" );
System . out . println ( sc );
/*
用筆記本電腦寫程序
“以后等你当上皇后,就能买草莓庆祝了”
*/ Konversi Tiongkok yang sederhana dan tradisional adalah pembungkus untuk mengkonversi Metode Cina convertToTraditionalChinese dan convertToSimplifiedChinese di HANLP. Ini dapat mengidentifikasi kata -kata yang dibagi antara Cina sederhana dan tradisional, seperti打印机=印表機; dan banyak karakter yang tidak dapat dibedakan dengan alat konversi Tiongkok yang sederhana dan tradisional, seperti dua "年" dalam "年" dan "ratu".
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 menggunakan daftar kata untuk membuat objek WordCloud, kemudian memanggil metode createImage untuk membuat gambar cloud kata, dan melewati alamat yang disimpan dari gambar sebagai parameter. Kata cloud menarik ukuran setiap kata sesuai dengan frekuensi kata. Semakin tinggi frekuensi kata, semakin besar kata; Warna dan posisi dihasilkan secara acak.

Ukuran gambar yang dihasilkan default adalah 500x400 dan warna latar belakang putih. Anda juga dapat menyesuaikan warna latar belakang dan ukuran gambar gambar
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, 黑色背景Saya ingin memberikan penghormatan kepada penulis dari proyek -proyek berikut, yang merupakan perangkat lunak open source yang mempromosikan mempopulerkan dan penerapan teknologi pemrosesan bahasa alami.