我是PHP的新手
我有一个像这样的数组
$suspiciousList = array(
array ("word" => "badword1", "score" => 400, "type" => 1),
array ("word" => "badword2", "score" => 250, "type" => 1),
array ("word" => "badword3", "score" => 400, "type" => 1),
array ("word" => "badword4", "score" => 400, "type" => 1));
当用户输入带有空格的单词(badw ord1,b adword2等)或者用户可能输入如(b a d w o r d 1)
时,我会遇到问题如何从阵列(字典)中检测或搜索组合?
我的想法是让每个单词成为一个由空格分割的数组。
$ this-> suspiciousPart [] = $ word;
我正在编写以下功能
public function deepDetect2() {
for($i=0;$i<sizeof($this->suspiciousPart);$i++) {
$word = "";
for($j=$i;$j<sizeof($this->suspiciousPart);$j++) {
$word .= $this->suspiciousPart[$j];
//var_dump($word);
if(strpos(in_array($word, $this->suspiciousList), $word) !== false) {
if($this->detect($word) == true) {
$i++;
} else {
$j++;
}
} else {
$i++;
}
}
}
}
任何人都有其他想法如何做到这一点?
由于
答案 0 :(得分:2)
无论如何,您可以删除空白字符并使用(mb_
)substr_count()
,但这会导致误报。
答案 1 :(得分:2)
正如Jirka Helmich建议您可以删除空格(以及其他特殊字符),然后搜索字符串以查找数组中的单词。
public function searchForBadWords($strippedText) {
foreach($suspiciousList as $suspiciousPart) {
$count = substr_count($strippedText, $suspiciousPart['word']);
//you can use str_replace here or something, it depends what you want to achive
}
}
问题是,如果你有像blablabad wordblabla这样的单词,你删除正常单词的空格可能会变成坏单词blablabadwordblabla
(知道我的意思吗?):D
干杯
编辑:所以Ahmad我看到你只是在开头/结尾(快捷方式)中用“”来识别它们。也许您应该尝试使用单个单词来实现这两种方法,并使用子字符串搜索。这还取决于你对表现的关注程度。也许你应该尝试做一些研究,或者看看它的效果如何?:D
答案 2 :(得分:2)
答案 3 :(得分:2)
这个问题是一个好的开始:How do you implement a good profanity filter? - 我同意这个结论,即检测结果总是很差。
我会尝试这些方法:
1)根据你的字典,简单地检测粗俗的单词。
2)提出一些启发式方法,例如“由一个字母组成的连续'单词''(b a d w o r d)并用它们来评估用户的帖子。然后,您可以计算预期的粗俗字数:\sum_i^{number of your heuristics} P_i * N_i
,其中P_i
是使用启发式i
找到的单词实际上是粗俗单词的概率,N_i
是一个heuristics i
找到的单词。我认为概率方法比简单地说“这篇文章不包含粗俗词”更好。
3)让主持人决定帖子是否真的粗俗。否则,自动替换方法的不完善很可能会让用户发疯。
4)我认为用英语(或土耳其语)字典查找单词是没有用的,以便找到不是真正英语单词的单词,因为这些日子里人们拼错了单词。
答案 4 :(得分:1)
@ f1ames:我正在使用以下代码来制作数组。
$words = mb_strtolower($words, 'UTF-8');
$words = $this->removeUniCharCategories($words);
$words = explode(" ",$words);
//Remove empty Array !
$words = array_filter($words);
foreach ($words as &$value) {
$newWords[] = $value;
}
$words = $newWords;
但我仍然找到最好的溶液