تدمج حزمة معالجة اللغة الطبيعية AHA 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 المستخرج في دليل جذر المشروع.تتم قراءة جميع المعلمات في مشروع 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 إلى 4 جيجابايت.
يمكن استدعاء جميع وظائف 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 Goll (NLPSegment) نموذج Perceptron ، بدعم من إطار وضع تسلسل Perceptron المهيكل ، ويقوم بإجراء تعليق توضيحي جزئي للكلام والتعرف على كيان التسمية في نفس الوقت ، مع دقة أعلى ومناسبة للاستخدام في بيئة الإنتاج.
تحتوي نتيجة الإرجاع الافتراضية لـ Word Goldle على كلمة وجزء من الكلام. يمكنك الحصول على كلمة أو جزء من قائمة الكلام بواسطة AHANLP.getWordList(stdSegResult) و AHANLP.getNatureList(stdSegResult) على التوالي. للحصول على شرح جزء من الكلام ، يرجى الرجوع إلى "مجموعة شرح الجزئية HANLP".
إذا كنت بحاجة إلى تخصيص تصفية جزئي للكلام ، فيمكنك استخدام فئة me.xiaosheng.chnlp.seg.POSFilter ، والتي تنفذ أيضًا طرقًا مشتركة مثل تصفية علامات الترقيم والاحتفاظ بكلمات حقيقية.
// 过滤标点
POSFilter . removePunc ( stdSegResult );
// 保留名词
POSFilter . selectPOS ( stdSegResult , Arrays . asList ( "n" , "ns" , "nr" , "nt" , "nz" ));تدعم كلمة النعت أعلاه تصفية كلمات الإيقاف ، فقط أحضر المعلمة الثانية وقم بتعيينها على True.
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.txt.trie.dat و 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 )));يعد تقسيم الكلمات حسب الجمل على النص الطويل أيضًا استخدامًا شائعًا ، ويعيد قائمة بالنتائج المكونة من جميع جمل Word Gollle. يتم التحكم في نوع جزء الكلمات من خلال المعلمة الفرعية الأولى: "القياسي" يتوافق مع شريحة الكلمات القياسية ، و "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 المهيكل ، ويتم تحديد الوقت واسم المكان واسم الشخص واسم المؤسسة في النص: اسم الشخص per ، اسم loc ، اسم المنظمة org ، 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 );
// [北京, 是, 首都] تحليل بناء جملة التبعية هو تغليف لمحلل بناء جملة التبعية عالي الأداء على أساس الشبكات العصبية. نتائج التحليل بتنسيق conll ، ويمكنك التكرار وفقًا لنوع كلمة conllword. كما هو موضح أعلاه ، فإن CoNLLWord.LEMMA هي كلمة عبيد ، CoNLLWord.HEAD.LEMMA هي الكلمة المهيمنة ، و CoNLLWord.DEPREL هي التسمية التابعة ، وتتخلف عن التسمية الصينية.
إذا كنت بحاجة إلى استخدام ملصق باللغة الإنجليزية ، فما عليك سوى إحضار المعلمة الثانية وقم بتعيينها على True
CoNLLSentence enDeps = AHANLP.DependencyParse(sentence, true);
للحصول على أوصاف مفصلة لعلامات التبعية ، يرجى الرجوع إلى "علامات التبعية".
String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" ;
List < String > wordList = AHANLP . extractKeyword ( document , 5 );
System . out . println ( wordList );
//[航空母舰, 动力, 建造, 牵引, 完成]تقوم دالة extractkeyword بتعيين عدد الكلمات الرئيسية التي يتم إرجاعها من خلال المعلمة الثانية. يتم حساب قيمة تصنيف كل كلمة داخليًا من خلال خوارزمية 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日上午在中国船舶重工集团公司大连造船厂举行。航空母舰主船体完成建造。
*/وظيفة المستخلص هي المسؤولة عن استخراج الجمل الرئيسية ، والمعلمة الثانية تتحكم في عدد الجمل الرئيسية المستخرجة. وظيفة المستخلصات هي المسؤولة عن الملخص التلقائي ، والمعلمة الثانية تحدد الحد الأعلى لعدد الكلمات الموجز. يتم حساب قيمة تصنيف كل جملة داخليًا من خلال خوارزمية Textrank ، ورتبتها بترتيب تنازلي بقيمة المرتبة ، واستخراج الجمل الرئيسية السابقة. الملخص التلقائي مشابه ، كما ينظر في موضع الجملة في النص الأصلي وطول الجملة. للحصول على مبادئ محددة ، يرجى الرجوع إلى "الكلمات الرئيسية لاستخراج خوارزمية 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
*/ WordSimilarity و Sectrencheimilarity هي وظائف تحسب تشابه الكلمات والجمل على التوالي. تستخدم عملية الحساب Word Vectors التي تم تدريبها مسبقًا بواسطة نموذج Word2VEC. قبل الاستخدام ، تحتاج إلى تنزيل نموذج Word2VEC ، ثم تخزين ملف النموذج الذي تم إلغاء ضغطه في data/model/ دليل المشروع. يتم حساب تشابه الكلمة مباشرة عن طريق حساب قيمة Vector Vector. يمكنك الرجوع إلى Word2Vec/Comple1 للحصول على طريقة للحصول على تشابه الجملة. إذا كنت ترغب في تدريب نموذج Word2Vec بنفسك ، فيمكنك الرجوع إلى تدريب إصدار Google من النموذج.
ملاحظة: يستخدم SectencesImarity تجزئة الكلمات القياسية لتقطيع الجمل بشكل افتراضي وتصفية الكلمات إيقاف.
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]
*/ يمكن لمكون SRL في أدوات MATE (بما في ذلك التعرف على جزء الكلام ومحلل بناء الجملة المعتمد) تحديد predicate في النص والوسائط المقابلة: Agent A0 ، المستلم A1 ، Time TMP و LOC . أضاف الدعم للنص الطويل srlparsecontent (المحتوى) ومطابقة الإزاحة النصية ، والتي يمكن وضعها من خلال موضع ومواقع التماثيل والحجج في النص.
ملاحظة: يتوافق كل مسند مع أكثر من وسيطة واحدة في فئة معينة ، على سبيل المثال ، يمكن أن يتوافق "الهجوم" المسند مع العديد من المنشطات 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 بشكل افتراضي ، يتم استخدام نموذج News LDA للتنبؤ بالمواضيع ، وعدد الموضوع مع الحد الأقصى للاحتمال هو الإخراج. تم تدريب النموذج الافتراضي من 1000 أخبار (ربما غير راضية) من كل فئة في Sogou News Corpus (Sogoucs) ، مع ما مجموعه 100 موضوع.
يمكن للمستخدمين أيضًا تدريب نموذج LDA بأنفسهم من خلال ZHNLP.trainLDAModel() . بعد التدريب ، يمكنهم استخدام طريقة 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 );
/*
用筆記本電腦寫程序
“以后等你当上皇后,就能买草莓庆祝了”
*/ إن التحويل الصيني البسيط والتقليدي هو غلاف إلى الأساليب convertToSimplifiedChinese convertToTraditionalChinese والمحولة في HANLP. يمكنه تحديد الكلمات التي تنقسم بين الصينيين البسيطين والتقليديين ، مثل打印机=印表機؛ والعديد من الشخصيات التي لا يمكن تمييزها بأدوات التحويل الصينية البسيطة والتقليدية ، مثل "年" في "年" و "Queen".
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 قائمة Word لإنشاء كائن WordCloud ، ثم يستدعي طريقة createImage لإنشاء صورة سحابة كلمة ، وتجاوز العنوان المحفوظ للصورة كمعلمة. ترسم كلمة السحابة حجم كل كلمة وفقًا لتردد كلمة. كلما ارتفعت كلمة تردد ، زادت الكلمة ؛ يتم إنشاء اللون والموضع بشكل عشوائي.

حجم الصورة المتولد الافتراضي هو 500 × 400 ولون الخلفية أبيض. يمكنك أيضًا تخصيص لون الخلفية وحجم الصورة للصورة
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, 黑色背景أود أن أشيد بمؤلفي المشاريع التالية ، وهي هذه البرامج المفتوحة المصدر التي تعزز تعميم وتطبيق تكنولوجيا معالجة اللغة الطبيعية.