Пакет обработки естественного языка AHA объединяет HANLP , Word2VEC , Mate-Tools и другие проекты, предоставляя высококачественные услуги по обработке естественных языков китайского языка.
Текущие функции, предоставленные AHANLP :
Последняя версия ahanlp.jar и соответствующий базовый пакет данных Ahanlp_base , нажмите здесь, чтобы загрузить. Файлы конфигурации Ahanlp.properties и Hanlp.properties помещаются в класс. Для большинства проектов вам нужно только поместить их в каталог SRC. IDE автоматически скопирует их в дорожке класса во время компиляции.
AHANLP следует за структурой организации данных HANLP, разделения кода и данных. Пользователи могут выбрать соответствующие пакеты данных для загрузки в соответствии с их потребностями:
dictionary и каталог model хранятся в data/ каталоге проекта.data/model/ модели проекта.python -m pip install xxx.whl после загрузки). Затем загрузите Word_Cloud (Extract Code 9jb6) и поместите извлеченную папку word_cloud в каталог Project Root.Все параметры в проекте 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 в будущем пользователям не нужно изменять вызывающий код.
Все демонстрации расположены под тестированием. Настоятельно рекомендуется запустить его один раз, и вы также можете проверить:
Документация интерфейса 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-биграммы и использует метод кратчайшего круга для разделения слова (решение для кратчайшего цепи используется алгоритм Viterbi), принимая во внимание как эффективность, так и эффект. Причастие NLP (NLPSEGME) инкапсулирует модель Perceptron, поддерживаемую структурированной структурой маркировки последовательности Pesptron, и выполняет аннотацию частичной речи и одновременно именование сущностей, с более высокой точностью и подходящим для использования в производственной среде.
Результат возврата по умолчанию причастия слова содержит слово и часть речи. Вы можете получить слово или часть списка речи от 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; Если за пространством, за которой следует часть речи, сразу же сопровождается частью речи, словарь по умолчанию по умолчанию на часть речи.** ПРИМЕЧАНИЕ. Если вы измените какой -либо словарь, удаление кэша вступит в силу.
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 )));Разделение слов по предложениям в длинном тексту также является общим использованием и возвращает список результатов, состоящих из всех предложений причастия слова. Тип сегментации слов контролируется через первый параметр сегтипа: «Стандарт» соответствует стандартному сегменту слов, а «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 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 );
// [北京, 是, 首都] Анализ синтаксиса зависимости-это инкапсуляция NeuralnetWorkDependencyParser в HANLP, используя высокопроизводительный анализатор синтаксиса зависимости на основе нейронных сетей. Результаты анализа находятся в формате 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 );
//[航空母舰, 动力, 建造, 牵引, 完成]Функция Extractkeword устанавливает количество ключевых слов, возвращаемых через второй параметр. Значение ранга каждого слова рассчитывается внутренне через алгоритм 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
*/ WordsImility и предложения - это функции, которые рассчитывают сходство слов и предложений соответственно. Процесс расчета использует слова векторов, предварительно обученные моделью Word2VEC. Перед использованием вам необходимо загрузить модель Word2VEC, а затем сохранить декомпрессированный файл модели в data/model/ модели проекта. Сходство слов напрямую рассчитывается путем вычисления значения косинусного косинуса слова. Вы можете ссылаться на Word2VEC/Vessuction1 для получения сходства предложений. Если вы хотите тренировать модель Word2VEC самостоятельно, вы можете обратиться к Google версии модели.
ПРИМЕЧАНИЕ. Предложения Имиларность использует стандартную сегментацию слов для сегментации предложений по умолчанию и отфильтровывать слова.
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-Tools (включая распознавание части речи и зависимый синтаксис-анализатор) может идентифицировать predicate в тексте и соответствующие аргументы: агент A0 , получатель A1 , Time TMP и местоположение 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 По умолчанию модель 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 );
/*
用筆記本電腦寫程序
“以后等你当上皇后,就能买草莓庆祝了”
*/ Простое и традиционное китайское преобразование - это обертка для convertToTraditionalChinese и convertToSimplifiedChinese методов в 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 использует список слов для создания объекта 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, 黑色背景Я хотел бы отдать дань уважения авторам следующих проектов, которые являются этим программным обеспечением с открытым исходным кодом, который способствует популяризации и применению технологии обработки естественного языка.