使用python2.7和nltk替换代词及其前提

时间:2013-04-07 09:06:08

标签: python python-2.7 nlp nltk

正如标题所示,我试图在一个字符串中寻找代词,并将其替换为以前的代词:

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

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

1 个答案:

答案 0 :(得分:4)

我不知道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.

为了在最一般的情况下解决你的问题,你应该找到(或制作)英语(或任何其他)语言的正式规范,它可以准确地告诉你句子的哪一部分是主语,动词例如:许多简单的英语句子都是形式的(括号[]之间的部分是可选的,括号之间的部分()是选择,即(| 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。英语不是我的母语,所以我希望我已经使用了正确的术语!