我有以下结果,您可以看到名称edward有不同的结果(null和male)。这有几个名字。
edward, Gender: null
james, Gender: MALE
karla, Gender: null
edward, Gender: MALE
此外,我如何自定义性别词典?我想添加西班牙语和中文名字。
答案 0 :(得分:2)
你提出了很多问题!
1。)Karla不在默认的性别映射文件中,因此这就是为什么它变为空
2。)如果你想制作自己的自定义文件,它应该采用以下格式:
JOHN \ tMALE
每行应该有一个NAME \ tGENDER条目
GenderAnnotator只能为映射提取1个文件,因此您需要创建一个包含要添加的名称的新文件。
默认的性别映射文件位于stanford-corenlp-3.5.2-models.jar文件中。
您可以通过以下方式从该jar中提取默认的性别映射文件:
mkdir tmp-stanford-models-expanded
cp /path/of/stanford-corenlp-3.5.2-models.jar tmp-stanford-models-expanded
cd tmp-stanford-models-expanded
jar xf stanford-corenlp-3.5.2-models.jar
现在应该有tmp-stanford-models-expanded / edu
您想要的文件是tmp-stanford-models-expanded / edu / stanford / nlp / models / gender / first_name_map_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.。)尝试在你的管道中运行性别BEFORE(参见我上面的注释器的订购)。如果令牌已经具有NER标记,则RegexNERSequenceClassifier(添加Gender标签的类)可能会被阻止。在我看来,首先运行性别注释器将解决问题。因此,当您构建管道时,请确保性别在ner之前。
序列“edward james karla edward”被NER标记器标记为“O O PERSON PERSON”。我不完全确定为什么前两个令牌的NER标签得到“O”。我会注意到“Edward James Karla Edward”会产生“PERSON PERSON PERSON PERSON”,并记住句子中位置的NER标记因子,因此在句子开头可能是较低的句子导致第一个标记“edward “被标记为”O“?
如果您对此有任何疑问,请告诉我,我们将很乐意为您提供帮助!
TL; DR
1。)Karla被标记为错误,因为该名称不在性别词典中
2.。)您可以使用NAME \ tGENDER创建自己的性别映射文件,确保将属性“gender.firstnames”设置为新的性别映射文件的路径。
3。)确保性别注释器在ner注释器之前,这应该可以解决问题!