スパムメール、スパムサイト、スパムアカウントを機械的に排除しようとしても、なかなかうまくいきませんでした。
その理由の1つに、スパムがランダムな文字列を使っていたから、というのがあります。
ランダムな文字列には、単語を無意味につなげたワードサラダもふくみます。
スパムフィルタを作るにあたって、文字列がランダムか?ランダムでないか?の判定は、超むずかしかったです。
たとえば、ツイッターでスパムツイートを繰り返すアカウントです。
アットマークから始まるID(@xxxxxxxx)が、長くてランダムな文字列になっているのが多かったです。
なので、とりあえず単語や名前になっていないID(アイディー)をはじこうとしたのですが、これがうまくいかない。
普通のアカウントでも、語呂合わせとか、ローマ字の母音を取り出した文字列とかで、ランダムっぽいIDになっているのがたくさんありました。
人の目で見れば、『なんかゴロ合わせっぽいな』とか、『ローマ字を省略した感じだな』とか、だいたいわかります。
ですが、そういうのをプログラムで機械的に判定しようとすると、辞書や正規表現だけでは無理でした(自分が試した限りでは)。
ツイート内容のスパム判定でも、同じようなむずかしさがありました。
スパムアカウントは、トレンドのハッシュタグや単語を、ランダムに組み合わせた内容をツイートしていました。
実際は、ランダムというほどランダムではなくて、単語のレパートリーとかもそんなに多い感じはしなかったです。
ですが、それでもスパム判定はとても難しかったです。
結局、普通のアカウントを通しながら、スパムツイートだけをうまく除外することはできませんでした。
一応、文章中の一部の単語を入れ替えてツイートしていたタイプに関しては、正規表現パターンを作ってはじくことができました。
ですが、短期間でまた新しい文章パターンが作られてしまって、イタチごっこになりました。
定型文にランダムな要素を組み合わせるだけで、途端にスパム判定が難しくなることを思い知りました。
ランダムな要素があると、ひとつのツイートだけでスパム判定をすることはできなくて、前後のツイートを広く見る必要がありました。
このあたりは、ワードサラダ(単語を適当につなげて作った文章)をはじくのが難しかったのと、全く同じ感じでした。
人の目で見ても、部分的に読んだだけでは変だと思いません。
ある程度読み進めてみて、ようやく『文章がおかしい』と気づきます。
Twitterのように短い文章の場合は、一つのツイートだけではなんともいえない。
前後のツイートをながめてみて、ようやく変だとわかる。
同じような投稿を繰り返しているとか、具体的な数字や名称がぜんぜん登場しないとか。
一部をランダムに変化させたスパムツイートやワードサラダは、これはスパムだと、簡単に見分ける方法が無かったです。
一方で、全く同じ内容のツイートを複数のアカウントで発信していたタイプは、容易に検出できました。
簡単に除外できるものもあったという意味では、スパムフィルタ作成にチャレンジしたかいがありました。
ですが、少しでもランダム要素を取り入れたものに関しては、ほぼ無理でした。
あと、普通の人でもランダムっぽいツイートをしていたケースもあって、スパムか否(いな)かの境界は、とてもあいまいでした。
スパムフィルタはとても有益なツールですが、作るのも維持するのも、すごく難しかったです。