lingspam dataset
現在、600ファイル(400通のメールと200通のスパムメール)の単語の出現をカウントして処理しようとしています。Porter Stemmer
Aglorithmを使用して各単語をユニバーサルにしました。また、結果を各ファイル全体で標準化して、さらに処理できるようにしたいと思います。しかし、どうすればこれを達成できるかわかりません。
これまでのリソース
以下の出力を取得するには、ファイル内に存在しない可能性のあるアイテムを昇順で追加できる必要があります。
printing from ./../lingspam_results/spmsgb164.txt.out
[('money', 0, 'univers', 0, 'sales', 0)]
printing from ./../lingspam_results/spmsgb166.txt.out
[('money', 2, 'univers', 0, 'sales', 0)]
printing from ./../lingspam_results/spmsgb167.txt.out
[('money', 0, 'univers', 0, 'sales', 1)]
次に、をvectors
使用するように変換する予定numpy
です。
[0,0,0]
[2,0,0]
[0,0,0]
それ以外の..
printing from ./../lingspam_results/spmsgb165.txt.out
[]
printing from ./../lingspam_results/spmsgb166.txt.out
[('univers', 2)]
printing from ./../lingspam_results/spmsgb167.txt.out
[('sale', 1)]
Counter
モジュールからの結果をに標準化するにはどうすればよいですかAscending Order
(カウンター結果に、自分からは存在しない可能性のある項目を追加することもできますsearch_list
)?各テキストファイルから読み取り、に基づいてリストを作成する、以下の何かを試しましたsearch_list
。
import numpy as np, os
from collections import Counter
def parse_bag(directory, search_list):
words = []
for (dirpath, dirnames, filenames) in os.walk(directory):
for f in filenames:
path = directory + "/" + f
count_words(path, search_list)
return;
def count_words(filename, search_list):
textwords = open(filename, 'r').read().split()
filteredwords = [t for t in textwords if t in search_list]
wordfreq = Counter(filteredwords).most_common(5)
print "printing from " + filename
print wordfreq
search_list = ['sale', 'univers', 'money']
parse_bag("./../lingspam_results", search_list)
ありがとう