如标题所示,我试图在字符串中查找代词,并用类似以下的先行词替换它:

[in]: "the princess looked from the palace, she was happy".
[out]: "the princess looked from the palace, the princess was happy".

我使用pos标签返回代词和名词。我需要知道如何在不知道句子的情况下进行替换,这意味着如何在句子中指定主题以用其替换代词。有什么建议么?

最佳答案

我不知道nltk软件包(从未使用过),但是它似乎可以立即给出您的答案。如果您查看nltk.org上的分析树示例,则表明该主题已成功标记有“NP-SBJ”标签。这不是您要找的东西吗?

(以前,我忽略了标题中的“nltk”部分,而在下面写下了这一部分。我认为作为如何解决此类问题的一般介绍可能会很有趣(特别是如果您没有可用的软件包),所以我将其留在这里:)

这比Python问题更像是一个“自然语言”(即英语)问题。请问您期望什么样的句子更具体?它适用于所有可能的英语句子吗?我认为那真的很难。

如果句子足够“简单”,则假定第一个动词之前的所有内容都是主语就足够了。这适用于您的示例,但不适用于以下句子:

yesterday the princess looked from the palace, she was happy.
the princes who drank tea looked from the palace, she was happy.

(请注意,在后一句话中,主题是“喝茶的公主”,“喝茶的人”是“形容词短语”)。

另外,指定如果代词没有指向主语(例如,指向宾语)时应该发生的情况:
the princess looked at the prince, he was happy.

为了在最一般的情况下解决问题,您应该找到(或制定)英语(或任何其他)语言的正式规范,该规范可以准确告诉您句子的哪一部分是主语,动词,宾语等例如:许多简单的英语句子都具有以下形式(方括号[]之间的部分是可选的,括号()之间的部分是选择的,即,(the | a)意味着您应该选择'the'或'a'):
sentence := subject verb [object]

规范右侧的每个部分都需要更详细地指定,例如:
subject, object := (noun_part_of_sentence|noun_part_of_sentence_plural)
noun_part_of_sentence := article [adjectivelist] [noun_modifier] noun # I guess there is a formal name for this...
noun_part_of_sentence_plural := [adjectivelist] [noun_modifier] noun_plural # note: no article
adjectivelist:= adjective [adjectivelist] # i.e., one or more adjectives

对于更复杂的句子,例如上面带有形容词短语的句子,上面的说明不足够,应该是这样的:
noun_part_of_sentence := (the|a) [adjectivelist] [noun_modifier] [noun] [adjective_phrase]
adjective_phrase := relative_pronoun verb [object]
relative_pronoun := (who|which|that)

请注意,上面的说明已经非常强大:(如果您能够正确识别每个单词的类型,例如动词,名词,冠词等),则可以成功检测以下句子:
The princess drank the tea.
The beautiful princess drank the tea.
The beautiful princess drank delicious the tea.
A beautiful princess drank delicious the lemon tea.
The beautiful princess who saw the handsome prince drank the refreshing tea.
The beautiful princess who saw the handsome prince who made the tea drank the refreshing tea.

但是,它还不允许(例如)句子“公主望着宫殿”,“公主喝茶”(注:不是“茶”)和其他无限的句子。诀窍是将您的正式说明扩展到适合您期望的句子类型的水平。

成功解析完句子后,您(因此)便知道主题,代词是什么,就可以进行替换。但是请注意,英语不是唯一的语言,例如:
The princess looked at her mother, she was happy.

她是指向公主还是母亲?

祝你好运!

P.S.英语不是我的母语,所以我希望我在所有事情上都使用了正确的术语!

关于python - 使用python2.7和nltk将代词替换为其先行词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15860695/

10-12 22:43