我正在构建一个文本聊天系统。我想添加检查禁止的单词/短语的能力。
我能想到的唯一技术,并且不能相信它可能是最好的方法是在所有单词中进行FOR循环并在文本中搜索匹配。一旦添加了大量单词,这似乎会令人难以置信地缓慢。
我正在使用AS3,但大多数语言的答案都可能有用。
小心, 利答案 0 :(得分:3)
在python中使用AS3字典或dict,然后检查单词是否在dict中。没有办法让我看不到所有的话。
答案 1 :(得分:2)
考虑将您词典中的所有条目连接到一个RegExp中,您只需要将该文本解析一次。我做了一些测试,而且比逐字逐句更快。
function censorWithDictionary ( dict:Dictionary, text:String ) : String {
var reg : String = "";
for (var key:Object in dict)
{
reg += reg=="" ? "" : "|"; // add an "or" for multiple search words
reg += "\\b"+dict[key]+"\\b"; // only whole words
}
var regExp : RegExp = new RegExp ( reg, "gi" );
return text.replace ( regExp, "----" );
}
答案 2 :(得分:2)
我遇到了类似的问题 - 我们经营一个游戏网站,并希望引入一个未经手动审核的聊天系统。我们走了“禁止的话”路线,它的工作非常好。
我只计算了它们,我们现在有一个(仅)79个被禁止的单词列表,这些单词来源于我在网上找到的东西,随着时间的推移我们在聊天消息传出时添加了单词。
我们检查事物的方式是通过删除所有空格和没有字母字符来连接整个聊天消息,然后在剩下的内容中搜索禁止的单词。
我们做出的关键决定是:
1 + 3 + 5现在几乎没有发生过,即使有时会发生奇妙的效果 - 有时像
这样的消息“我希望它很热!”
被拒绝(线索是愿望和“它”的“sh”部分)但即便如此也不会经常发生。
答案 3 :(得分:1)
这更多是评论而不是答案,但评论篇幅有限,而且这里存在很大问题。
我相信你从根本上提出了错误的问题!
当然,字典和黑名单会突出显示您想要禁止的字词或短语,但该列表是否可供系统用户接受?是否存在系统用户发现令人反感的文本但您没有。谁决定?
例如,生活here的人会遇到麻烦,或者确实有人生活here。如果您支持this football/soccer team,该怎么办? This person可能永远不会访问英国。
然后你进入了字谜和俚语的问题。 FCUK是英国的高街品牌(我确信其他地方)。然后是pr0n
(没有链接!)或NAMBLA。
真正的问题是 - 如何阻止使用该系统的人使用通常不可接受的语言?这更像是设计/社会工程问题,而不是编程问题。我不认为这个网站有单词/短语过滤,但这里没有什么可以导致任何人的攻击。</ p>
这是一个想法 - 让您的用户决定什么是可以接受的!使用基于信誉的系统。允许用户对表现并拒绝导致攻击的用户进行投票的用户进行投票(可以选择允许用户对投票给出反馈,让他们有机会修改他们的方式),然后选择过滤低/用户负面声誉。