基本上,我正在编写一个Java模块,该模块应该采用英文文本并切换代词的性别。因此,例如,如果您给它“她把盒子放在桌子上”,它就会给您“他把盒子放在桌子上”。如果您给它“他的脚受伤”,它将给您“她的脚受伤”。
除了“她”一词,这非常容易。有时是他的她,有时是他的她。
我一直在研究NLP,对此我几乎一无所知,我尝试了OpenNLP,但它使我失望了(由于许可问题,我无法使用Standford NLP)。 POS标记器和分块器与她/她混淆,解析器也是如此。因此,例如:
盒子是他的。
(TOP (S (NP (DT The) (NN box)) (VP (VBD was) (NP (PRP$ his))) (. .)))
那个盒子是她的。
(TOP (S (NP (DT The) (NN box)) (VP (VBD was) (ADJP (JJ hers))) (. .)))
那个盒子是他的盒子。
(TOP (S (NP (DT The) (NN box)) (VP (VBD was) (NP (PRP$ his) (NN box))) (. .)))
那个盒子是她的盒子。
(TOP (S (NP (DT The) (NN box)) (VP (VBD was) (NP (PRP$ her) (NN box))) (. .)))
它正确地将“她”识别为一个形容词短语,但是当以完全相同的方式在谓词中使用“他”时,它会错误地将其识别为所有格代词,就像在第三和第四示例中正在修饰某些名词一样。 ..
这只是培训问题吗?是否有可能创建自己的训练集来做得更好,而这个训练集基本上只有他/她的句子数不胜数?
如果您能告诉我是否有任何方法可以使用NLP来确定代词的先行词,则可得到加分。例如:
"Wanda gave a watch to a girl named Lucy. She loved it."
我的猜测是,这几乎是不可能的,因为有时对人类来说这甚至很难。
最佳答案
从示例来看,只要它出现为节点的唯一子代,就可以尝试将his
替换为hers
而不是her
,据我所知,英语(不是母语)对应于单词的用法例如“她的”,“我的”等
即
# NP with one child
(NP (PRP$ his)) ==> (ADJP (JJ hers))
但
# NP with two children, "his" and "box"
(NP (PRP$ his) (NN box)) ==> (NP (PRP$ her) (NN box))
(自从我对语法树执行任何操作以来已经很久了,但是在第一个示例中,解析器似乎在
NP
标签上犯了一个错误。)如果您能告诉我是否有任何方法可以使用NLP来确定代词的先行词,则可得到加分。
这被称为代词解析,或更普遍地称为回指解析,关于这一问题的文献很多。此任务的基准算法称为Hobbs算法,并在SLP或this question中描述。
关于java - 使用NLP切换性别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11777579/