Das AHA-Verarbeitungspaket für natürliche Sprache integriert HANLP , WORD2VEC , MATE-TOOLS und andere Projekte und bietet qualitativ hochwertige chinesische Dienste für natürliche Sprache.
Die aktuellen Funktionen von AHANLP sind:
Die neueste Version von AHANLP.JAR und das entsprechende grundlegende Datenpaket AHANLP_BASE , Klicken Sie hier, um herunterzuladen. Die Konfigurationsdateien AHANLP.Properties und HanLP.Properties werden in den Klassenpfad eingesetzt. Für die meisten Projekte müssen Sie sie nur in das SRC -Verzeichnis aufnehmen. Die IDE kopiert sie automatisch während der Zusammenstellung in den Klassenpfad.
AHANLP folgt HANLPs Datenorganisationsstruktur, Code und Datentrennung. Benutzer können entsprechende Datenpakete auswählen, die entsprechend ihren Anforderungen heruntergeladen werden:
dictionary -Verzeichnis und model im data/ Verzeichnis des Projekts gespeichert.data/model/ Verzeichnis des Projekts.python -m pip install xxx.whl nach dem Herunterladen). Laden Sie dann WORD_CLOUD (Code 9JB6 extrahieren) herunter und platzieren Sie den extrahierten word_cloud -Ordner im Projektroot -Verzeichnis.Alle Parameter im AHANLP -Projekt werden aus der Konfigurationsdatei gelesen (Benutzeränderung wird nicht empfohlen), und das Folgende ist eine kurze Beschreibung.
Die Hauptkonfigurationsdatei ist ahanlp.properties , und der Word2VEC -Modellpfad muss konfiguriert werden, und der Standardwert ist
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
Die HANLP -Konfigurationsdatei ist hanlp.properties . Sie müssen nur den Pfad festlegen, in dem sich das Datenverzeichnis in der ersten Zeile befindet. Der Standard ist
root=./
HINWEIS: Das semantische Rollenmarkierungsmodul hat einen hohen Speicherpflichtzdruck. Wenn Sie diese Funktion verwenden möchten, setzen Sie bitte den maximalen Speicherausdruck des JVM auf 4 GB.
Fast alle Funktionen von AHANLP können schnell durch die Werkzeugklasse AHANLP aufgerufen werden. Es wird auch empfohlen, dass Benutzer immer die Tools -Klasse AHANLP überschreiten, sodass Benutzer nach dem Upgrade von AHANLP den Anrufcode nicht ändern müssen.
Alle Demos befinden sich zu testend. Demo, die mehr Details als das nachstehende Einführungsdokument abdecken. Es wird dringend empfohlen, es einmal auszuführen, und Sie können es auch überprüfen:
AHANLP -Schnittstellendokumentation .
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]Das Standardsegment verkauft das HMM-Bigram-Modell und verwendet die kürzeste Methode, um das Wort zu teilen (die kürzeste Lösung für Kreislauf verwendet den Viterbi-Algorithmus), wobei sowohl Effizienz als auch Effekt berücksichtigt werden. NLP Partizip (NLPSegment) umfasst das Perzeptron-Modell, das durch das strukturierte Rahmen der Perceptron-Sequenz-Kennzeichnung unterstützt wird, und führt gleichzeitig eine Annotation und Benennungsentitätsbekanntheit mit höherer Genauigkeit durch, mit einer höheren Genauigkeit und geeignet für die Verwendung in der Produktionsumgebung geeignet.
Das Standard -Rückgabeergebnis von Wort Partizip enthält Wort und Teil der Sprache. Sie können das Wort oder einen Teil der Sprachliste von AHANLP.getWordList(stdSegResult) bzw. AHANLP.getNatureList(stdSegResult) erhalten. Für die Annotation für einen Teil der Speech finden Sie in der "HANLP-Annotationssammlung" HANLP-Annotation.
Wenn Sie die Abläufe der Speech-Filterung anpassen müssen, können Sie die me.xiaosheng.chnlp.seg.POSFilter -Klasse verwenden, die auch gemeinsame Methoden wie die Filterung von Interpunktion und das Aufbewahren realer Wörter implementiert.
// 过滤标点
POSFilter . removePunc ( stdSegResult );
// 保留名词
POSFilter . selectPOS ( stdSegResult , Arrays . asList ( "n" , "ns" , "nr" , "nt" , "nz" ));Das oben oben genannte Wort Partizip unterstützt die Filterung von Stoppwörtern. Bringen Sie einfach den zweiten Parameter mit und setzen Sie ihn auf wahr.
List < Term > stdSegResult = AHANLP . NLPSegment ( content , true );
List < String > stdWordList = AHANLP . getWordList ( stdSegResult );
System . out . println ( stdWordList );
//[苏州大学, 周国栋, 教授, 正在, 教授, 自然语言处理, 课程] Die Wortsegmentierung unterstützt das benutzerdefinierte Wörterbuch. HANLP verwendet die CustomDictionary -Klasse, um sie darzustellen. Es ist ein globales benutzerdefiniertes Wörterbuch, das alle Vokabeln betrifft. Der Dictionary -Textpfad ist data/dictionary/custom/CustomDictionary.txt , in dem Benutzer ihre eigenen Wörter hinzufügen können (nicht empfohlen). Sie können auch eine neue Textdatei separat erstellen und das Dictionary über die Konfigurationsdatei CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 我的词典.txt; (empfohlen).
Wörterbuchformat:
[单词] [词性A] [A的频次] [词性B] [B的频次] ... Wenn ein Teil der Sprache nicht geschrieben ist, bedeutet dies, dass der Standardteil der Sprache im Wörterbuch übernommen wird.全国地名大全.txt ns; Wenn der Raum, dem der Teil der Sprache gefolgt ist, sofort von dem Teil der Rede folgt, stand das Wörterbuch gegen den Teil der Sprache.** Hinweis: ** Das Programm liest das Wörterbuch aus Cache -Dateien (Dateiname.txt.bin oder Dateiname.txt.trie.dat und Dateiname.txt.trie.value) standardmäßig. Wenn Sie ein Wörterbuch ändern, wirkt sich nur das Löschen des Cache in Kraft.
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 )));Die Verteilung von Wörtern durch Sätze auf Long Text ist ebenfalls eine übliche Verwendung und gibt eine Liste von Ergebnissen zurück, die aus allen Sätzen des Wortpartizips zusammenhängen. Der Typ des Wortsegmentierers wird über den ersten SEGTYPE -Parameter gesteuert: "Standard" entspricht dem Standard -Wortsegment, und "NLP" entspricht dem NLP -Partizip.
Natürlich können Sie die Sätze auch manuell brechen und sie dann in mehrere Sätze teilen.
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] Die Modelle Perceptron und CRF werden eingekapselt, unterstützt durch das strukturierte Framework der Perceptron -Sequenz -Kennzeichnung, und die Zeit, der Ortsname, der Personenname und den Organisationsnamen im Text werden identifiziert: Personenname per , Ortsname loc , Organisationsname org und 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 );
// [北京, 是, 首都] Die Abhängigkeitssyntaxanalyse ist eine Kapselung von NeuralNetworkDependenCyparser in HANLP unter Verwendung eines auf neuronalen Netzwerke basierenden Hochleistungs-Abhängigkeits-Syntaxanalysators. Die Analyseergebnisse sind im Conll -Format und Sie können gemäß dem Conllword -Typ itererieren. Wie oben gezeigt, ist CoNLLWord.LEMMA ein Sklavenwort, CoNLLWord.HEAD.LEMMA ist das dominante Wort, und CoNLLWord.DEPREL ist das abhängige Etikett und standardmäßig zum chinesischen Etikett.
Wenn Sie ein englisches Etikett verwenden müssen, bringen Sie einfach den zweiten Parameter mit und setzen Sie es auf wahr
CoNLLSentence enDeps = AHANLP.DependencyParse(sentence, true);
Ausführliche Beschreibungen von Abhängigkeits -Tags finden Sie unter "Abhängigkeits -Tags".
String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" ;
List < String > wordList = AHANLP . extractKeyword ( document , 5 );
System . out . println ( wordList );
//[航空母舰, 动力, 建造, 牵引, 完成]Die ExtractKeyword -Funktion legt die Anzahl der Schlüsselwörter fest, die über den zweiten Parameter zurückgegeben werden. Der Rangwert jedes Wortes wird intern über den Textrank -Algorithmus berechnet und in absteigender Reihenfolge des Rangwerts angeordnet, wodurch die vorherigen wenigen als Schlüsselwörter extrahiert werden. Für bestimmte Prinzipien finden Sie in Schlüsselwörtern und Abstracts "Textrank Algorithmus Extraction".
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日上午在中国船舶重工集团公司大连造船厂举行。航空母舰主船体完成建造。
*/Die ExtractkeySturece -Funktion ist für das Extrahieren von Schlüsselsätzen verantwortlich, und der zweite Parameter steuert die Anzahl der extrahierten Schlüsselsätze. Die ExtractSummary -Funktion ist für die automatische Zusammenfassung verantwortlich, und der zweite Parameter legt die Obergrenze der Zusammenfassung der Wortzahl fest. Der Rangwert jedes Satzes wird intern über den Textrank -Algorithmus berechnet und arrangiert ihn in absteigender Reihenfolge des Rangwerts, wodurch die vorherigen wenigen als Schlüsselsätze extrahiert werden. Die automatische Zusammenfassung ist ähnlich und berücksichtigt auch die Position des Satzes im ursprünglichen Text und die Länge des Satzes. Für bestimmte Prinzipien finden Sie in Schlüsselwörtern und Abstracts "Textrank Algorithmus Extraction".
Der Grad der Ähnlichkeit zwischen Sätzen (d. H. Die Gewichte im Textrank -Algorithmus) wird unter Verwendung der von Word2VEC bereitgestellten Funktionen berechnet. Das im chinesische Corpus von Wikipedia ausgebildete Modell wird standardmäßig verwendet, und es kann auch ein benutzerdefiniertes Modell verwendet werden.
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
*/ WordSIMilarity und SätzeImilarität sind Funktionen, die die Ähnlichkeit von Wörtern und Sätzen berechnen. Der Berechnungsprozess verwendet die vom Word2VEC-Modell vorgebrachten Wortvektoren. Vor der Verwendung müssen Sie das Word2VEC -Modell herunterladen und dann die dekomprimierte Modelldatei im data/model/ Verzeichnis des Projekts speichern. Die Wortähnlichkeit wird direkt berechnet, indem der Wort Vektor Cosinus -Wert berechnet wird. Sie können sich auf Word2VEC/Issues1 beziehen, um eine Satzähnlichkeit zu erhalten. Wenn Sie selbst das Word2VEC -Modell selbst trainieren möchten, können Sie sich auf die Schulung der Google -Version des Modells verweisen.
HINWEIS: SätzeImilarity verwendet standardmäßig Standard -Word -Segmentierung, um die Sätze standardmäßig zu segmentieren und Stopp -Wörter herauszufiltern.
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]
*/ Die SRL-Komponente in MATE-Tools (einschließlich Teil des Speechs und abhängigen Syntaxanalysators) kann das predicate im Text und die entsprechenden Argumente identifizieren: Agent A0 , Empfänger A1 , Time TMP und Standort LOC . Unterstützung für lange Text srlParsecontent (Inhalt) und übereinstimmende Textversuche, die über die Position und die Aussagen von Prädikaten und Argumenten im Text positioniert werden können.
Hinweis: Jedes Prädikat entspricht mehr als einem Argument in einer bestimmten Kategorie, beispielsweise kann der Prädikat "Angriff" mehreren Aktivatoren A0 (Angreifer) entsprechen.
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 -Thema Vorhersage standardmäßig wird das LDA -Modell von News LDA verwendet, um Themen vorherzusagen, und die Themenzahl mit der maximalen Wahrscheinlichkeit wird ausgegeben. Das Standardmodell wird aus 1.000 (möglicherweise unzufriedenen) Nachrichten aus jeder Kategorie im Sogou News Corpus (Sogroucs) mit insgesamt 100 Themen geschult.
Benutzer können das LDA -Modell auch selbst über ZHNLP.trainLDAModel() trainieren. Nach dem Training können sie die überladene topicInference verwenden, um sie zu laden.
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 ); Wenn Sie ldademo.java zum Testen ausführen müssen, müssen Sie auch SOGOUCA_MINI herunterladen und den extrahierten mini -Ordner im data/ des Projekts speichern.
String tc = AHANLP . convertSC2TC ( "用笔记本电脑写程序" );
System . out . println ( tc );
String sc = AHANLP . convertTC2SC ( "「以後等妳當上皇后,就能買士多啤梨慶祝了」" );
System . out . println ( sc );
/*
用筆記本電腦寫程序
“以后等你当上皇后,就能买草莓庆祝了”
*/ Die einfache und traditionelle chinesische Konvertierung ist ein Wrapper, um convertToTraditionalChinese und convertToSimplifiedChinese Methoden in HANLP umzuwandeln. Es kann Wörter identifizieren, die zwischen einfachem und traditionellem Chinesisch aufgeteilt sind, wie z. B.打印机=印表機; und viele Charaktere, die nicht durch einfache und traditionelle chinesische Konvertierungswerkzeuge wie die beiden "年" in "年" und "Queen" unterschieden werden können.
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 verwendet eine Wortliste, um ein WordCloud -Objekt zu erstellen, dann createImage , um ein Word -Cloud -Bild zu erstellen, und übergibt die gespeicherte Adresse des Bildes als Parameter. Die Wortwolke zeichnet die Größe jedes Wortes gemäß der Wortfrequenz. Je höher die Wortfrequenz, desto größer ist das Wort; Die Farbe und Position werden zufällig erzeugt.

Die standardmäßige Bildgröße beträgt 500x400 und die Hintergrundfarbe ist weiß. Sie können auch die Hintergrundfarbe und Bildgröße des Bildes anpassen
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, 黑色背景Ich möchte den Autoren der folgenden Projekte Tribut zollen.