是否有软件/脚本或任何方式可以自动替换her文档中的所有内容him以及his分别适用的地方?
例子
Calls her and tells her that her car is …
Run Code Online (Sandbox Code Playgroud)
到
Calls him and tells him that his car is …
Run Code Online (Sandbox Code Playgroud)
简短的回答:是的,但这比你想象的要难。
长答案:普通的查找和替换代码在形态层面上运行,也就是说,通过查看文本的形式而不是理解其含义。但是第三人称女性代词的宾格和所有格没有形态学上的指示,所以普通的查找和替换无法区分它们之间的区别。为此,您需要一种可以在词汇级别分析文本的工具——也就是说,可以检查文本并推导出其含义的工具。
这比简单的查找和替换问题要困难得多,除非您的问题域受到足够严格的约束,您可以将一些启发式方法组合在一起,然后手动检查并修补结果。如果你能摆脱它,那太好了!
如果没有,那么编写代码以正确完成工作是一个值得努力的问题,那么您最好从斯坦福 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
Run Code Online (Sandbox Code Playgroud)
参考事实上的标准词性标签列表,我们发现 CoreNLP 正确识别了我们感兴趣的每个代词的格——PRP 代表人称代词,PRP$ 代表所有格代词。
有了这些信息,以及每个代词案例的异性等价物的知识,我们就可以进行替换;事实上,由于 CoreNLP 告诉我们字符位置和词性,而不是查找和替换语义,我们实际上可以遍历解析树并逐字重建句子,填充单词之间的空格并替换代词当我们遇到他们时产生兴趣。
这就是你可以做到的!显然,这或多或少是对这样一个复杂主题的最轻松的处理——但是,如果您倾向于编写必要的代码,这应该足以让您进入起点。祝你好运!