java使用nlp工具完成英文词性还原、分词

您所在的位置:网站首页 词缀判断词性的口诀有哪些 java使用nlp工具完成英文词性还原、分词

java使用nlp工具完成英文词性还原、分词

2024-07-12 15:25| 来源: 网络整理| 查看: 265

前言

       在一些英文处理的业务中,有时候会面临一些场景:判断这个单词是否在当前句子中,但英文相对比较棘手的问题是有很多词汇的变形如单复数、过去时、现在进行时、将来时等等,这样采用简单的字符串匹配操作肯定是不合适了,因此一直需要一个nlp分词器将句子中词汇分开、词性还原等。

       正好找到了一个斯坦福提供的nlp java工具包,可以有多种语言的:词性标注(part-of-speech (POS) tagger)、命名实体识别(named entity recognizer (NER))、情感分析(sentiment analysis)等功能,我们拿来做词性还原是有点大材小用了。

使用stanford nlp

       下面我们就来使用一下这个工具,先引入相应的包,使用maven如下:

edu.stanford.nlp stanford-corenlp 3.9.2 edu.stanford.nlp stanford-corenlp 3.9.2 models

        使用jar包在这里下载 https://stanfordnlp.github.io/CoreNLP/download.html,如下图: 在这里插入图片描述

demo

       demo如下,在demo中输入的一堆字符串包括几句话、一个网址、词组等,其中可以看到,一句完整的话中,每个词都获取了其最原始的词性,但是网址中的英文却不行,而且复合词,中间带-的词比如hard-working,应该是视为了一个词,因此working并没有转换为原词。

package com.example.test.stanfornlp; import edu.stanford.nlp.ling.CoreAnnotations; import edu.stanford.nlp.ling.CoreLabel; import edu.stanford.nlp.pipeline.Annotation; import edu.stanford.nlp.pipeline.StanfordCoreNLP; import edu.stanford.nlp.util.CoreMap; import java.util.ArrayList; import java.util.List; import java.util.Properties; public class Test { public static void main(String[] args) { String str = "2 running Quick brown-foxes leap over lazy dogs in the summer evening. https://blog.csdn.net/LS7011846/article/details/101151185"; List wordList = getOriginalText(str); for (String word:wordList) { System.out.println(word); } } /** * 根据string获取对应原始词性词汇列表 * @param text * @return */ public static List getOriginalText(String text){ List wordList = new ArrayList(); Properties properties = new Properties(); //分词、分句、词性标注和次元信息。 properties.put("annotators","tokenize,ssplit,pos,lemma"); StanfordCoreNLP pipeline = new StanfordCoreNLP(properties); Annotation document = new Annotation(text); pipeline.annotate(document); List words = document.get(CoreAnnotations.SentencesAnnotation.class); for(CoreMap wordTemp: words) { for (CoreLabel token: wordTemp.get(CoreAnnotations.TokensAnnotation.class)) { String originalWord = token.get(CoreAnnotations.LemmaAnnotation.class); // 获取对应上面word的词元信息,即我所需要的词形还原后的单词 wordList.add(originalWord); } } return wordList; } }

       输出如下:

2 run quick brown-fox leap over lazy dog in the summer evening , long-distance telephone , hard-working people , https://blog.csdn.net/ls7011846/article/details/101151185 结语

       以上只是使用stanfornlp来做了英语句子词汇原型的还原,只是没找到其他合适的工具 哈哈杀鸡焉用牛刀,如果有想做nlp相关的伙伴可以多关注这些。

参考文档:https://stanfordnlp.github.io/CoreNLP/download.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3