我正在尝试让Stanford Core NLP识别识别码。问题是代码中有标点符号。例如01.A01.01
导致输入被分成三个句子。
此代码的匹配表达式为[0-9][0-9][.][a-z,A-Z][0-9][0-9][.][0-9][0-9]
。我已经尝试将其添加到我的regexner.txt
文件中,但它没有识别它(可能是因为令牌是跨越不同的句子?)
我也尝试使用类似于以下的TokenRegex来匹配它(也没有任何成功)。
/tell/ /me/ /about/ (?$refCode /[0-9][0-9]/ /./ /[a-z,A-Z][0-9][0-9]/ /./ /[0-9][0-9]/ )
一些例子使用......
用户拥有资源02.G36.63保留。
21.J83.02可用吗?
有没有人有任何想法或建议?
答案 0 :(得分:1)
我拿了你的样本输入并用“”代替“\ n”来创建:
The user has resource 02.G36.63 reserved. Is 21.J83.02 available?
我创建了这个规则文件(sample-rules.txt):
02.G36.63 ID_CODE MISC 2
我跑了这个命令:
java -Xmx8g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,regexner -regexner.mapping sample-rules.txt -ssplit.eolonly -tokenize.whitespace -file sample-sentence.txt -outputFormat text
我得到了这个输出:
Sentence #1 (9 tokens):
The user has resource 02.G36.63 reserved. Is 21.J83.02 available?
[Text=The CharacterOffsetBegin=0 CharacterOffsetEnd=3 PartOfSpeech=DT Lemma=the NamedEntityTag=O]
[Text=user CharacterOffsetBegin=4 CharacterOffsetEnd=8 PartOfSpeech=NN Lemma=user NamedEntityTag=O]
[Text=has CharacterOffsetBegin=9 CharacterOffsetEnd=12 PartOfSpeech=VBZ Lemma=have NamedEntityTag=O]
[Text=resource CharacterOffsetBegin=13 CharacterOffsetEnd=21 PartOfSpeech=NN Lemma=resource NamedEntityTag=O]
[Text=02.G36.63 CharacterOffsetBegin=22 CharacterOffsetEnd=31 PartOfSpeech=NN Lemma=02.g36.63 NamedEntityTag=ID_CODE]
[Text=reserved. CharacterOffsetBegin=32 CharacterOffsetEnd=41 PartOfSpeech=NN Lemma=reserved. NamedEntityTag=O]
[Text=Is CharacterOffsetBegin=43 CharacterOffsetEnd=45 PartOfSpeech=VBZ Lemma=be NamedEntityTag=O]
[Text=21.J83.02 CharacterOffsetBegin=46 CharacterOffsetEnd=55 PartOfSpeech=NN Lemma=21.j83.02 NamedEntityTag=O]
[Text=available? CharacterOffsetBegin=56 CharacterOffsetEnd=66 PartOfSpeech=NN Lemma=available? NamedEntityTag=O]
这就是说只是在空白上进行标记,所以它在这些时期停止了破坏。它还说仅在换行符上拆分句子,因此在输入文件中将整个用户请求放在一行上很重要。您不会获得句子,但您可以获得令牌流并识别您的产品代码。
现在,如果您真的想要斯坦福CoreNLP的全部功能,并且您不希望将这些代码拆分,您可以采用雄心勃勃的路线并更改令牌化程序PTBLexer.flex文件以包含您的所有ID代码。
该文件位于repo中:
https://github.com/stanfordnlp/CoreNLP/blob/master/src/edu/stanford/nlp/process/PTBLexer.flex
您必须在Google周围查找有关将PTBLexer.flex文件编译到PTBLexer.java的说明。该网站应该包含您需要的信息:
这基本上意味着添加您的ID代码并进行一些轻微编辑,然后重建PTBLexer。然后使用自定义标记器,Stanford CoreNLP会将您的产品代码视为完整标记,如果您想要执行类似分析用户请求的依赖关系结构的操作,则可以进行正常的句子拆分。