WordNet 3.0诅咒词

时间:2012-09-09 03:41:33

标签: mysql lexical-analysis wordnet

我正在开发一个系统,从纯文本中提取关键字。

关键字的要求是:

  1. 长达1至45个字母
  2. Word必须存在于WordNet数据库中
  3. 一定不能是“常用”字样
  4. 一定不能成为诅咒词
  5. 我已经满足了要求1 - 3,但我找不到找到诅咒词之间区别的方法;我该如何过滤它们?

    我知道这不是一个过滤掉所有诅咒词的明确方法,但会发生的事情是所有关键词在被主持人“批准”之前首先被设置为“待定”状态。但是,如果我能让WordNet过滤出大部分诅咒词,那么主持人的工作就会变得更加轻松。

2 个答案:

答案 0 :(得分:3)

奇怪的是,WordNet(wn)的Unix命令行版本将为您提供所需的功能 选项-domn(domain)的信息:

wn ass -domnn (-domnv for a verb)

...
>>> USAGE->(noun) obscenity#2, smut#4, vulgarism#1, filth#4, dirty word#1
>>> USAGE->(noun) slang#2, cant#3, jargon#1, lingo#1, argot#1, patois#1, vernacular#1

但是,NLTK中的等效方法只返回一个空列表:

from nltk.corpus import wordnet
a = wordnet.synsets('ass')
for s in a:
    for l in s.lemmas:
        print l.usage_domains()

[]
[]
...

作为替代方案,您可以尝试过滤SynSet定义中具有“淫秽”,“粗糙”或“俚语”的单词。但是,如前所述(例如noswearing.com处的固定列表)可能更容易过滤固定列表。

更新:还有curse word filter API at Mashape.

答案 1 :(得分:0)

对于第4点,如果你可以收集诅咒词汇列表并通过迭代过程删除它们会更好,更有效。

要实现同样目的,您可以结帐this博客

我将在这里总结一下。  1.从here加载发誓字文本文件  2.将其与文本进行比较,如果匹配则删除。

def remove_curse_words():
    text = 'Hey Bro Fuck you'
    text = ' '.join([word for word in text.split() if word not in curseWords])
    return text

输出将是。

  

嘿,兄弟