[spambayes-dev] spammy subject lines
Tim Peters
tim.one at comcast.net
Sun Oct 12 13:47:40 EDT 2003
[Paul Sorenson]
> I added the following function:
> def leaveOnlyLetters(self, s):
> # Return s with any characters not in string.letters removed.
> import string
> return filter(lambda c: c in string.letters, s)
>
> And appended
> # Add words with non-letters removed.
> for w in x.split():
> yield 'subject:' + self.leaveOnlyLetters(w)
>
> At the end of the section to handle subject lines. It seems that a
> subject like "stati.stics" generates a clue like "subject:.",
Among others, yes.
> presumably via punctuation_run_re.findall(x)
That is the source of "subject:.".
> and my "cleaned up" subject token doesn't appear to get through - Ie I
> don't think it is working as I expect.
Why do you think that? We can't see what you did, and you didn't spell out
your evidence.
The leaveOnlyLetters method seems to work ok.
It should. Here's a patch for a more-efficient way; I know that it works; I
don't know whether it helps or hurts, though; I'm trying it now and too soon
to say.
Index: spambayes/tokenizer.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/tokenizer.py,v
retrieving revision 1.15
diff -c -u -r1.15 tokenizer.py
--- spambayes/tokenizer.py 18 Sep 2003 21:00:10 -0000 1.15
+++ spambayes/tokenizer.py 12 Oct 2003 17:42:41 -0000
@@ -642,6 +642,13 @@
subject_word_re = re.compile(r"[\w\x80-\xff$.%]+")
punctuation_run_re = re.compile(r'\W+')
+# A function to strip punctuation characters, for use in Subject line
+# de-obfuscation.
+id_map = ''.join(map(chr, range(256))) # maps each char to itself
+def strip_punctuation(word):
+ import string
+ return string.translate(word, id_map, string.punctuation)
+
fname_sep_re = re.compile(r'[/\\:]')
def crack_filename(fname):
@@ -1154,6 +1161,8 @@
yield 'subject:' + t
for w in punctuation_run_re.findall(x):
yield 'subject:' + w
+ for w in x.split():
+ yield 'subject:' + strip_punctuation(w)
# Dang -- I can't use Sender:. If I do,
# 'sender:email name:python-list-admin'
More information about the spambayes-dev
mailing list