8

我正在编写一个脚本来反转一段文本中的所有性别,所以所有的性别词都被交换了——“男人”与“女人”交换,“她”与“他”交换,等等。但有一个模棱两可的地方至于“her”应该换成“him”还是“his”。

4

9 回答 9

6

好的。让我们像语言学家一样看待这个问题。我在这里大声思考。

”是代词。它可以是:

1.物主代词

这是她的书。

2.人称代词

(介词后)

他给写了一封信。(间接宾语)

给她治感冒。(直接宾语)

所以让我们看一下情况(1),所有格代词。那就是它是“属格”情况下的代词(意思是,它是“所有格”的名词。好吧,那个细节并不像下一个那么重要。)

在这种情况下,“她”扮演着“决定者”的角色。限定词可能出现在句子中的两个地方(这是一种简化):

Det + 名词(“她的书”)

Det + Adj + 名词(“她的好书”)

所以要弄清楚她是否是一个决定者,你可以有这样的逻辑:

一个。如果“her”后面的词是名词,那么“her”是限定词。

湾。如果“her”后面的2个词是形容词,那么是名词,那么“her”是限定词”

如果您确定“her”是限定词,那么您就知道必须将其替换为“his”,这也是一个限定词(又名属格名词,又名所有格代词)。

如果它符合上述标准 (a) 和 (b),那么您可能会得出结论,它不是限定词,这意味着它必须是人称代词。在这种情况下,您可以将“她”替换为“他”。

您甚至不必进行以下测试,但无论如何我都会尝试描述它们。


从上面看(2):人称代词,而不是所有格。这变得更加棘手。

上面的例子显示了“她”以 3 种方式出现:

(1)(在介词之后。我们称之为“介词宾语”。)

所以你也许可以设计一个规则:“如果 'her' 紧跟在介词之后,那么它应该被视为一个名词,所以我们会用 'him' 代替它”。

接下来的两个很棘手。“她”可以是直接宾语,也可以是间接宾语。

(2)他给写了一封信。(间接宾语)

(3)给她治感冒。(直接宾语)

从语法上讲,我们如何区分?

直接宾语出现在动词之后。

如果你有一个动词,后面跟着一个名词,那么那个名词就是一个直接宾语。例如:

他对待 。*

如果你有一个动词,后面跟着一个名词,然后是一个介词短语,那么这个名词就是一个直接宾语。

给她治感冒。(“her”是名词,紧跟在动词“treatment”之后。“for a cold”是介词短语。)

这意味着您可以说“如果您有动词 + 名词 + Prep”,那么名词就是直接宾语。既然名词是直接宾语,那就是人称代词,所以用“他”。(注意,你只需要检查介词,而不是整个预备短语,因为短语总是以介词开头。)

如果它是间接宾语,那么您将具有“动词 + 名词 + 名词”的形式。

他给写了一封信。(“her”是名词,“letter”是名词。好吧,“a letter”是“名词短语”,所以你也必须考虑限定词。)

所以...如果“her”是直接宾语、间接宾语或 prep 的 obj,您可以将其更改为“him”,否则,将其更改为“his”。

这种方法似乎要复杂得多——所以我首先检查“her”是否是限定符(见上文),如果是限定符,则使用“his”,否则,只需使用“him”。


所以,上面有很多简化。它不包括“打断短语”、从句结构、选区测试、嵌入从句、标点符号或类似的东西。

此外,此解决方案需要一个字典——“名词”、“动词”和“介词”的列表,以便您可以确定句子中每个单词的词汇类别。

即使在那里,自然语言处理也很难。您想为您的模型进行某种“训练”以获得良好的解决方案。但是对于非常简单的事情,请尝试上面描述的一些东西。

抱歉这么啰嗦!(现有的答案都没有给出任何硬数据或精确的语言定义,所以就这样吧。)

于 2009-11-07T16:52:12.250 回答
3

尝试确定her是所有格代词还是人称代词比尝试确定himor的类别更难his。但是,如果语料库足够大,您会希望两者都在相同的上下文中使用。那么为什么不扭转问题呢?获取一个大型语料库并找到所有出现的himhis。然后查看它们周围的单词(您需要查看多少单词由您决定)。通过足够的训练示例,您可以估计单词附近的给定单词集指示him或的概率his。然后,您可以使用这些概率估计her来确定您是否应该使用himhis. 正如其他回复所表明的那样,你不会是完美的。此外,弄清楚要使用多大的社区以及如何计算概率是一项相当多的工作。使用像朴素贝叶斯这样的简单分类器可能会做得很好。

不过,我怀疑,您可以通过查看词性中的模式并编写一些规则来获得相当高的准确性。当然,你会错过一些,但可能有十几个规则会占大多数情况。我刚刚浏览her了 Rudyard Kipling 在“The Phantom Rickshaw”中出现的大约 50 处,您可以通过以下规则轻松获得 90% 的准确率:

her_followed_by_noun ? possessive : personal

您可以使用现成的词性 (POS) 标注器(如斯坦福词性标注器)自动确定单词是名词还是上下文中的其他内容。同样,它并不完美,但它做得很好。

奇数子句结构的边缘情况很难正确处理,但在大多数文本中也很少出现。这仅取决于您的数据。

于 2009-11-08T13:33:12.937 回答
3

天,

在这种情况下,您可能会花费大量时间来跟踪自动解决方案并最终得出一个无论如何您都必须检查的结果。

我建议让您的脚本插入一段文本,该文本将在“她”的每个实例中真正脱颖而出并且易于搜索。甚至可以让脚本同时插入“him”和“his”字符串,这样您在看到上下文后只需要删除其中一个?

通过这种方式,您将节省大量时间和精力。更别提血、汗、泪了!(-:

提出一个全自动的解决方案绝非易事,因为它将涉及扫描大量的词库以确定下一个词是否是对象。

有时获得额外的 5% 或 10% 的改进并不值得付出额外的努力。当然,除了作为一些教科书似乎喜欢的“它作为一个有趣的练习留给读者......”类型的问题。

编辑:我忘了提到找到这个“临界点”是一门真正的艺术。绝对是一项只有经验才能获得的技能。(-:

编辑:第二部分 - 复仇我也忘了提到你可以消除一个边缘情况。如果单词“him”后面跟着标点符号,例如“... to her.”、“... for her”等,那么您可以消除这些情况的不确定性,只需将它们替换为“him”。类似地,如果该词后跟一类词,例如“... for her to”,则“her”可以很容易地被“him”替换。编辑 3:这不是完整的例外列表,而只是作为您需要查找的项目列表起点的建议。

高温高压

于 2009-11-07T14:55:57.290 回答
3

鉴于您的项目范围:颠倒所有与性别相关的词,看来:

  • 在更基本的方法上的“投资”将是合理的
  • 没有基于简单查找/替换的启发式方法可以充分服务于所有甚至大多数情况。

此外,Regex 似乎也是一个糟糕的工具选择。自然语言不是常规语言;-)。

相反,您应该考虑引入词性 (POS) 标记,可能带有命名实体识别的提示,然后根据标记提供的额外信息应用替换规则。

这可能看起来需要做很多工作,但如果您的脚本语言恰好是 Python,您可以利用NTLK以相对较小的工作量来实现所有这些。

于 2009-11-07T15:23:14.177 回答
2

我不这么认为。您可以检查所有格代词后面是名词还是形容词,从而得出结论确实是所有格代词。但是当然你必须编写一个能够做到这一点的脚本,即使你有一个方法,在其他一些情况下它仍然是错误的。一个简单的模式匹配算法在这里帮不了你。

祝你好运:http ://en.wikipedia.org/wiki/X-bar_theory

于 2009-11-07T14:46:52.240 回答
1

绝对没有。你必须对你的输入文本进行句法分析(解析英语,真的,这就是“解析”这个词的来源)。这是您可以确定文本中“她”代表什么的唯一方法,您不能依赖搜索和替换。有很多方法可以做到这一点,但我认为没有一种方法可以称为“相当简单”。

于 2009-11-07T15:05:32.187 回答
1

我将解决正则表达式,因为这是标签之一。正则表达式不足以解析人类语言,因为正则表达式不进行递归,并且所有人类语言都是递归的。

当这一事实与英语中的其他歧义相结合时,例如许多单词可以在一个句子中发挥多种功能的方式,我认为可靠的自动化解决方案将是一个非常困难和昂贵的项目。

于 2009-11-07T15:13:49.643 回答
1

关于我能想到的唯一一个(我相信评论中的某个人会证明我错了!)是任何her后面跟标点符号的实例很可能被替换为him. 但我仍然同意之前的答案,您可能最好手动更换。

于 2009-11-07T15:16:00.790 回答
1

好的,根据人们给出的一些答案,我对如何解决这个问题有了更好的了解。与其尝试编写一个 100% 正确的脚本,我只想尽可能多地使它正确。快速搜索一些英文文本会发现“his”出现的频率(非常粗略)是“him”的两倍,因此默认行为应该是将“her”转换为“his”。如果我只这样做了,那么三分之二的时间应该是正确的。

现在我对找到显示“她”应该转换为“他”的模式不感兴趣,因为无论如何我都会这样做,我只对找到显示“她”应该转换为的模式感兴趣“他”,因为这些可以让我降低错误率。我可以相当轻松地实施两条规则:

  • 如 Michael Itzoe 所说,如果“她”后面紧跟逗号或句号,则应将其转换为“他”。

  • 如果“她”紧跟在介词之后,那么它应该被视为一个名词,我们将用“他”代替它,正如拉舍尔所说。

如果我使用词性标记软件,我将能够做更多的事情。我想我会先做简单的事情:-)

于 2009-11-09T18:07:25.220 回答