首页 > 解决方案 > 根据文本中的单词位置从字符串中过滤特定单词

问题描述

我有几个词性规则,只有当正在查看的文本与规则匹配时才会触发它们。但是我很好奇是否有办法删除出现在短语之间的“任何”单词,否则会触发规则。我尝试使用停用词,但它会将文本过多地剥离到规则变得毫无意义的地方。这是一个例子。

Text: I want to attack this player's base.

attack_rule = [
                ('nn', 'i'),
                ('vbp', 'want'),
                ('to', 'to'),
                ('vb', ('exterminate', 'waste', 'attack', 'shoot'))
                ]

文本将触发此规则,但是如果文本是这样写的:

Text2: I f***ing want to attack this player's base.
Text2: I want to f***ing attack this player's base.

规则不会触发。所以我想知道是否有办法从文本中过滤脏话/填充物,否则会触发规则?最好按位置。

我目前正在使用 nltk 的 POS 标记器。如果有一种方法可以确保该单词不会对句子产生上下文影响(如最高级),这似乎更难。或者,如果某个单词出现在会触发规则的文本之间,则只需删除它即可。

我尝试使用停用词,但就像我说的那样过滤太多,尤其是当句子的对象是最重要的部分之一时。

He will attack all of them <- Stop words present
 he attack <- Filtered stop words

标签: python-3.xnlpnltk

解决方案


您检查句子中标记的 POS 是否与您的模式匹配的逻辑是什么样的?感觉就像您可以一直忽略一定数量的带有标签的单词,直到句子末尾才匹配,并且如果您最终找到了所有带有标签的单词(以正确的顺序),则可以进行匹配。您还可以在一行中强制使用最大数量的带有错误标签的连续单词。

你也可以忽略只有几种标签的词,比如副词或形容词


推荐阅读