我正在使用命名实体重新识别器查看斯坦福corenlp。我有不同类型的输入文本,我需要将其标记到我自己的实体中。所以我开始训练我自己的模型,但它似乎不起作用。
例如:我的输入文本字符串是“关于丰田陆地巡洋舰1956-1987黄金投资组合的49篇杂志文章之书”http://t.co/EqxmY1VmLg http://t.co/F0Vefuoj9Q"
我通过这些例子来训练自己的模型,只寻找一些我感兴趣的单词。
我jane-austen-emma-ch1.tsv长这样
Toyota PERS
Land Cruiser PERS
从上面的输入文本中,我只对这两个词感兴趣。一个是丰田,另一个是陆地巡洋舰。
austin.prop是这样的
trainFile = jane-austen-emma-ch1.tsv
serializeTo = ner-model.ser.gz
map = word=0,answer=1
useClassFeature=true
useWord=true
useNGrams=true
noMidNGrams=true
useDisjunctive=true
maxNGramLeng=6
usePrev=true
useNext=true
useSequences=true
usePrevSequences=true
maxLeft=1
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
wordShape=chris2useLC
运行以下命令生成ner-model.ser.gz文件
Java-cpstanford-corenlp-3.4.1.jaredu.stanford.nlp.ie.crf.CRFhtml" target="_blank">分类器-propausten.prop
public static void main(String[] args) {
String serializedClassifier = "edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz";
String serializedClassifier2 = "C:/standford-ner/ner-model.ser.gz";
try {
NERClassifierCombiner classifier = new NERClassifierCombiner(false, false,
serializedClassifier2,serializedClassifier);
String ss = "Book of 49 Magazine Articles on Toyota Land Cruiser 1956-1987 Gold Portfolio http://t.co/EqxmY1VmLg http://t.co/F0Vefuoj9Q";
System.out.println("---");
List<List<CoreLabel>> out = classifier.classify(ss);
for (List<CoreLabel> sentence : out) {
for (CoreLabel word : sentence) {
System.out.print(word.word() + '/' + word.get(AnswerAnnotation.class) + ' ');
}
System.out.println();
}
} catch (ClassCastException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这是我得到的结果
Book/PERS of/PERS 49/O Magazine/PERS Articles/PERS on/O Toyota/PERS Land/PERS Cruiser/PERS 1956-1987/PERS Gold/O Portfolio/PERS http://t.co/EqxmY1VmLg/PERS http://t.co/F0Vefuoj9Q/PERS
我认为这是错误的。我正在寻找丰田/PERS和陆地巡洋舰/PERS(这是一款多值的汽车)。
谢谢你的帮助。任何帮助都是非常感激的。
NERClassifier*是单词级的,也就是说,它标记单词,而不是短语。鉴于此,分类器的性能似乎很好。如果需要,可以将构成短语的单词连字符。所以在你的标签示例和测试示例中,你会把“陆地巡洋舰”改为“陆地巡洋舰”。
我认为您还应该在trainFile
中添加0
实体的示例。正如您所给出的,trainFile
对于学习来说太简单了,它需要0
和PERSON
两个示例,所以它不会将所有内容都注释为PERSON
。你不是在教它关于你不感兴趣的实体。比如说:
Toyota PERS
of 0
Portfolio 0
49 0
等等
此外,对于短语级识别,你应该查看regexner
,在那里你可以有模式(模式对我们有好处)。我正在使用API
进行这项工作,我有以下代码:
Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, regexner");
props.put("regexner.mapping", customLocationFilename);
使用以下customLocationFileName
:
Make Believe Town figure of speech ORGANIZATION
( /Hello/ [{ ner:PERSON }]+ ) salut PERSON
Bachelor of (Arts|Laws|Science|Engineering) DEGREE
( /University/ /of/ [{ ner:LOCATION }] ) SCHOOL
文本:你好,玛丽·凯勒出生于7月4日,获得理学学士学位。部分发票(100000欧元,约40%)是我们于8月15日从假镇仓库运至伦敦大学的C27655货物。INV2345用于余额。。客户联系人(Sigourney Weaver)表示,他们将按照通常的信用条款(30天)支付这笔款项
我得到的输出
Hello Mary Keller is a salut
4th of July is a DATE
Bachelor of Science is a DEGREE
$ 100,000 is a MONEY
40 % is a PERCENT
15th August is a DATE
University of London is a ORGANIZATION
Make Believe Town is a figure of speech
Sigourney Weaver is a PERSON
30 days is a DURATION
有关如何做到这一点的更多信息,您可以查看让我前进的示例。
有人能指出openNLP NameFinder模块使用的算法吗?代码很复杂,只有很少的文档记录,并且将其作为黑匣子(提供默认模型)使用给我的印象是它主要是启发式的。以下是一些输入和输出示例: 输入: 约翰·史密斯很沮丧。 约翰·史密斯很沮丧。 巴拉克·奥巴马感到沮丧。 乌戈·查韦斯很沮丧。(不再) 杰夫·阿特伍德很沮丧。 刘冰对openNLP NER模块感到失望。 诺姆·乔姆斯基对这个世界感到沮丧
问题 你需要使用命名实体来替代 HTML 标签: <br/> => <br/> 解决方案 htmlEncode = (str) -> str.replace /[&<>"']/g, ($0) -> "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";" htmlEncode('<a hr
我正在尝试使用这个简短的实体识别教程来学习NER。但我无法成功运行代码。我在现场提供了一个入口。这里提到的txt文件。 我收到错误。 请帮帮我。先谢谢你。
我是JPA 2.1的新手,最近才开始使用命名实体图。对于我的项目,我正在JPA 2.1中映射以下关系: 顺序 我想指示JPA加入并正确获取所有需要的数据。到目前为止,这对订单来说完美无缺 - 以下是我的实体(省略了getter和setter): 次序 订单明细 产品 产品线
问题内容: 我使用NLTK从文本中提取命名实体: 但是我不知道如何将这些实体保存到列表中?例如– 谢谢。 问题答案: 返回嵌套对象,因此您必须遍历该对象才能到达网元。 看看带有正则表达式的命名实体识别:NLTK
我最近发现了命名实体图,我正试图以一种干净、干燥的方式实现它们。 我不确定的是(通过JPA和Spring数据文档阅读还没有回答)使用的名称的范围。是它们所定义的类的私有,还是我可以这样做: 车站在哪里。Route中的深子图是指Stop中的命名实体图。 谢谢!