![用“他”和“他的”代替“她”?](https://linux22.com/image/1381392/%E7%94%A8%E2%80%9C%E4%BB%96%E2%80%9D%E5%92%8C%E2%80%9C%E4%BB%96%E7%9A%84%E2%80%9D%E4%BB%A3%E6%9B%BF%E2%80%9C%E5%A5%B9%E2%80%9D%EF%BC%9F.png)
是否有软件/脚本或任何方法可以让我自动用和分别适用的部分替换her
文档中的所有内容?him
his
例子
Calls her and tells her that her car is …
到
Calls him and tells him that his car is …
答案1
简短的回答是:是的,但它比你想象的要难。
长答案:普通的查找和替换代码在形态层面上运行,即通过查看文本的形式而不是理解其含义。但是没有形态指示来区分第三人称女性代词的宾格和所有格,因此普通的查找和替换无法区分它们。为了做到这一点,您需要一个可以在词汇层面分析文本的工具——也就是说,可以检查文本并得出其含义的工具。
这比简单的查找和替换要困难得多,除非你的问题范围足够严格,以至于你可以拼凑一些启发式方法,然后手动检查并修补结果。如果你能做到这一点,那就太好了!
如果没有,而且这是一个值得努力编写代码来正确完成工作的问题,那么你最好开始使用斯坦福 NLP 项目的软件存储库,特别是 CoreNLP,它包含一个出色的词性标注器——这正是执行我所描述的词汇分析所需的工具。
为了给出 CoreNLP 示例,我输入了CoreNLP 在线演示根据您的示例,以下句子:
他打电话告诉她,她的车已经准备好了。
其标记如下:
Id Word Lemma Char begin Char end POS NER Normalized NER Speaker
—— —————— —————— —————————— ———————— ———— ——— —————————————— ———————
1 He he 0 2 PRP O PER0
2 calls call 3 8 VBZ O PER0
3 her she 9 12 PRP O PER0
4 and and 13 16 CC O PER0
5 tells tell 17 22 VBZ O PER0
6 her she 23 26 PRP$ O PER0
7 that that 27 31 DT O PER0
8 her she 32 35 PRP$ O PER0
9 car car 36 39 NN O PER0
10 is be 40 42 VBZ O PER0
11 ready ready 43 48 JJ O PER0
12 for for 49 52 IN O PER0
13 pickup pickup 53 59 NN O PER0
14 . . 59 60 . O PER0
参考事实上的标准词性标签列表,我们发现 CoreNLP 已经正确识别了我们感兴趣的每个代词的格——人称代词为 PRP,所有格代词为 PRP$。
有了这些信息以及对每个代词格反性别对应词的知识,我们就可以进行替换了;事实上,由于 CoreNLP 告诉我们字符位置和词性,所以我们可以实际遍历解析树并逐字重建句子,填充单词之间的空白,并在遇到感兴趣的代词时进行替换,而不是使用查找和替换语义。
这就是你该怎么做的!显然,这或多或少是对如此复杂主题的最轻松的处理——但是,如果你愿意编写必要的代码,这应该足以让你进入起跑线。祝你好运!