基本上,我正在编写一个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算法,并在SLPthis question中描述。

关于java - 使用NLP切换性别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11777579/

10-16 15:56