Stanford nlp 为什么斯坦福大学corenlp性别鉴定不确定?

Stanford nlp 为什么斯坦福大学corenlp性别鉴定不确定?,stanford-nlp,identification,Stanford Nlp,Identification,我有以下结果,正如您所看到的,edward的名字有不同的结果(null和male)。这种情况发生在几个名字身上 edward, Gender: null james, Gender: MALE karla, Gender: null edward, Gender: MALE 此外,如何定制性别词典?我想加上西班牙语和中文的名字。你提出了很多问题 1.)Karla不在默认的性别映射文件中,因此该文件变为null 2.)如果要制作自己的自定义文件,则应采用以下格式: 约翰·马尔 每行应有一个名称\

我有以下结果,正如您所看到的,edward的名字有不同的结果(null和male)。这种情况发生在几个名字身上

edward, Gender: null
james, Gender: MALE
karla, Gender: null
edward, Gender: MALE

此外,如何定制性别词典?我想加上西班牙语和中文的名字。

你提出了很多问题

1.)Karla不在默认的性别映射文件中,因此该文件变为null

2.)如果要制作自己的自定义文件,则应采用以下格式:

约翰·马尔

每行应有一个名称\t结束符条目

GenderAnotator只能为映射获取一个文件,因此您需要创建一个新文件,其中包含要添加的名称

默认的性别映射文件位于stanford-corenlp-3.5.2-models.jar文件中

您可以通过以下方式从该jar中提取默认性别映射文件:

  • mkdir tmp斯坦福模型扩展

  • cp/path/of/stanford-corenlp-3.5.2-models.jar tmp斯坦福模型扩展

  • cd-tmp-stanford模型扩展

  • jar xf斯坦福-corenlp-3.5.2-models.jar

  • 现在应该有tmp斯坦福模型扩展/edu

  • 您需要的文件是tmp stanford models expanded/edu/stanford/nlp/models/gender/first\u name\u map\u small

3.)以这种方式构建管道以使用自定义性别词典:

Properties props = new Properties();
props.setProperty("annotators",
    "tokenize, ssplit, pos, lemma, gender, ner");
props.setProperty("gender.firstnames","/path/to/your/gender_dictionary.txt");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
4.)试着在管道中运行gender-BEFORE-ner(参见我上面注释器的顺序)。如果令牌已经具有NER标记,则RegexNERSequenceClassifier(添加性别标记的类)可能会被阻止。在我看来,首先运行性别注释器可以解决问题。因此,在构建管道时,确保性别优先于女性

序列“edward james karla edward”由NER tagger标记为“O O PERSON”。我不完全清楚为什么前两个令牌的NER标记会得到“O”。我想指出的是,“Edward James Karla Edward”产生了“PERSON”,并请记住句子中的NER tagger因素,因此在句子开头小写可能会导致第一个标记“Edward”被标记为“O”

如果您对此有任何问题,请让我知道,我将很乐意提供更多帮助

TL;博士

1.)卡拉被标错了,因为那个名字不在性别词典中

2.)您可以使用名称\t创建自己的性别映射文件,请确保将属性“gender.firstnames”设置为新性别映射文件的路径


3.)确保性别注释器先于ner注释器,这将解决问题

您如何调用CoreNLP(即:您是如何在帖子中创建列表的)?您能否提供有关输入文件和您发出的命令的更多详细信息?谢谢感谢您的快速回答,我正在使用以下命令:loadStanfordCoreNLP();注释文件=新注释(“edward james karla edward”);管道注释(文件);for(CoreMap语句:document.get(CoreAnnotations.SentencesAnnotation.class)){for(CoreLabel令牌:语句.get(CoreAnnotations.TokensAnnotation.class)){System.out.print(token.value());System.out.print(,Gender:);System.out.println(token.get(machineradingannotations.GenderAnnotation.class));}