日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stanford corenlp的TokensRegex

發(fā)布時間:2023/12/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stanford corenlp的TokensRegex 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近做一些音樂類、讀物類的自然語言理解,就調(diào)研使用了下Stanford corenlp,記錄下來。

功能

Stanford Corenlp是一套自然語言分析工具集包括:

  • POS(part of speech tagger)-標(biāo)注詞性
  • NER(named entity recognizer)-實(shí)體名識別
  • Parser樹-分析句子的語法結(jié)構(gòu),如識別出短語詞組、主謂賓等
  • Coreference Resolution-指代消解,找出句子中代表同一個實(shí)體的詞。下文的I/my,Nader/he表示的是同一個人

  

  • Sentiment Analysis-情感分析
  • Bootstrapped pattern learning-自展的模式學(xué)習(xí)(也不知道翻譯對不對,大概就是可以無監(jiān)督的提取一些模式,如提取實(shí)體名)
  • Open IE(Information Extraction)-從純文本中提取有結(jié)構(gòu)關(guān)系組,如"Barack Obama was born in Hawaii" =》?(Barack Obama; was born in; Hawaii)

需求

語音交互類的應(yīng)用(如語音助手、智能音箱echo)收到的通常是口語化的自然語言,如:我想聽一個段子,給我來個牛郎織女的故事,要想精確的返回結(jié)果,就需要提出有用的主題詞,段子/牛郎織女/故事。看了一圈就想使用下corenlp的TokensRegex,基于tokens序列的正則表達(dá)式。因?yàn)樗峁┑目捎玫墓ぞ哂?#xff1a;正則表達(dá)式、分詞、詞性、實(shí)體類別,另外還可以自己指定實(shí)體類別,如指定牛郎織女是READ類別的實(shí)體。

Pattern語法

規(guī)則格式

{// ruleType is "text", "tokens", "composite", or "filter"ruleType: "tokens",//tokens是基于切詞用于tokens正則,text是文本串用于文本正則,composite/filter還沒搞明白// pattern to be matched pattern: ( ( [ { ner:PERSON } ]) /was/ /born/ /on/ ([ { ner:DATE } ]) ),// value associated with the expression for which the pattern was matched// matched expressions are returned with "DATE_OF_BIRTH" as the value// (as part of the MatchedExpression class)result: "DATE_OF_BIRTH" }

除了上面的字段外還有action/name/stage/active/priority等,可以參考文后的文獻(xiàn)。

ruleTypes是tokens,pattern中的基本元素是token,整體用(),1個token用[<expression>],1個expression用{tag:xx;ner:xx}來表述

ruleTypes是text,pattern就是常規(guī)的正則表達(dá)式,基本元素就是字符了,整體用//包圍

實(shí)例

corenlp提供了單條/多條正則表達(dá)式的提取,本文就介紹從文件中加載規(guī)則來攔截我們需要的文本,并從中提取主題詞。

依賴包
<dependency><groupId>edu.stanford.nlp</groupId><artifactId>stanford-corenlp</artifactId><version>3.4.1</version> </dependency> <dependency><groupId>edu.stanford.nlp</groupId><artifactId>stanford-corenlp</artifactId><version>3.4.1</version><classifier>models</classifier> </dependency>
<!--中文支持--> <dependency><groupId>edu.stanford.nlp</groupId><artifactId>stanford-corenlp</artifactId><version>3.6.0</version><classifier>models-chinese</classifier> </dependency>
屬性配置CoreNLP-chinese.properties(可以參考stanford-corenlp-models-chinese中的配置)
annotators = segment, ssplit, pos, ner, regexner, parse regexner.mapping = regexner.txt//自定義的實(shí)體正則表達(dá)式文件customAnnotatorClass.segment = edu.stanford.nlp.pipeline.ChineseSegmenterAnnotatorsegment.model = edu/stanford/nlp/models/segmenter/chinese/pku.gz segment.sighanCorporaDict = edu/stanford/nlp/models/segmenter/chinese segment.serDictionary = edu/stanford/nlp/models/segmenter/chinese/dict-chris6.ser.gz segment.sighanPostProcessing = truessplit.boundaryTokenRegex = [.]|[!?]+|[。]|[!?]+ //句子切分符pos.model = edu/stanford/nlp/models/pos-tagger/chinese-distsim/chinese-distsim.taggerner.model = edu/stanford/nlp/models/ner/chinese.misc.distsim.crf.ser.gz ner.applyNumericClassifiers = false ner.useSUTime = falseparse.model = edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz

corenlp中對文本的一次處理稱為一個pipeline,annotators代表一個處理節(jié)點(diǎn),如segment切詞、ssplit句子切割(將一段話分為多個句子)、pos詞性、ner實(shí)體命名、regexner是用自定義正則表達(dá)式來標(biāo)注實(shí)體類型、parse是句子結(jié)構(gòu)解析。后面就是各annotator的屬性。

自定義的規(guī)則文件

regexner.txt(將'牛郎織女'的實(shí)體類別識別為READ)

牛郎織女 READ

rule.txt(tokensregex規(guī)則)

$TYPE="/笑話|故事|段子|口技|謎語|寓言|評書|相聲|小品|唐詩|古詩|宋詞|繞口令|故事|小說/ | /腦筋/ /急轉(zhuǎn)彎/" //單類型 {ruleType: "tokens",pattern: ((?$type $TYPE)),result: Format("%s;%s;%s", "", $$type.text.replace(" ",""), "") }

(?type xx)代表一個命名group,提取該group將結(jié)果組裝成xx;xx;xx形式返回

代碼
//加載tokens正則表達(dá) CoreMapExpressionExtractor extractor = CoreMapExpressionExtractor.createExtractorFromFile(TokenSequencePattern.getNewEnv(), "rule.txt"); //創(chuàng)建pipeline StanfordCoreNLP coreNLP = new StanfordCoreNLP("CoreNLP-chinese.properties"); //處理文本 Annotation annotation = coreNLP.process("聽個故事"); List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class); CoreMap sentence = sentences.get(0); //獲得第一個句子分析結(jié)果 //過一遍tokens正則 List<MatchedExpression> matchedExpressions = extractor.extractExpressions(sentence); for (MatchedExpression match : matchedExpressions) {System.out.println("Matched expression: " + match.getText() + " with value " + match.getValue()); }

想看下分析結(jié)果,如切詞、詞性、實(shí)體名,可以使用下面的函數(shù)

private void debug(CoreMap sentence) {// 從CoreMap中取出CoreLabel List,逐一打印出來List<CoreLabel> tokens = sentence.get(CoreAnnotations.TokensAnnotation.class);System.out.println("字/詞" + "\t " + "詞性" + "\t " + "實(shí)體標(biāo)記");System.out.println("-----------------------------");for (CoreLabel token : tokens) {String word = token.getString(CoreAnnotations.TextAnnotation.class);String pos = token.getString(CoreAnnotations.PartOfSpeechAnnotation.class);String ner = token.getString(CoreAnnotations.NamedEntityTagAnnotation.class);System.out.println(word + "\t " + pos + "\t " + ner);}}

功能還是很強(qiáng)大的,畢竟可以用的東西多了,遇到問題時方法就多了。

參考文獻(xiàn)

TokensRegex:?http://nlp.stanford.edu/software/tokensregex.shtml

SequenceMatchRules:?http://nlp.stanford.edu/nlp/javadoc/javanlp-3.5.0/edu/stanford/nlp/ling/tokensregex/SequenceMatchRules.html

Regexner:?http://nlp.stanford.edu/software/regexner.html

轉(zhuǎn)載于:https://www.cnblogs.com/whuqin/p/5741706.html

總結(jié)

以上是生活随笔為你收集整理的stanford corenlp的TokensRegex的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。