2016-09-08 9 views
0

私はPythonとNLTKを使って、特定の.txtファイルにサブジェクトを割り当てるための基本的なドキュメント分類子を作成しています。PythonとNLTKによる基本的なテキストの分類

私はPythonの新機能ですので、コードは良くないと思いますが、特に問題があります。私は9つの#idを自動的にテキストファイルにアクセスするように変更しました。なぜなら、それらをすべて手動で追加しようとしていたからです。ただし、ファイルのテキストを含む9つの#_featsリストの代わりに、ファイルの名前のみが含まれます。 #idsには、ファイル名とテキストの両方が含まれています。私は問題がdef_wordfeats(単語)であると思うが、私はそれが何であるか分からない。すべてのヘルプは

import os 
from nltk import FreqDist 
from nltk.classify import NaiveBayesClassifier 
from nltk.corpus import stopwords 
stopset = list(set(stopwords.words('english'))) 


1ids = {} 
2ids = {} 
3ids = {} 
4ids = {} 
5ids = {} 
6ids = {} 
7ids = {} 
8ids = {} 
9ids = {} 


path1 = "/Users/myname/Documents/Data Classifier Files/1/" 

for name in os.listdir(path1): 
    if name[-4:] == '.txt': 
     f = open(path1 + "/" + name, "r") 
     1ids[name] = f.read() 
     f.close() 

path2 = "/Users/myname/Documents/Data Classifier Files/2/" 

for name in os.listdir(path2): 
    if name[-4:] == '.txt': 
     f = open(path2 + "/" + name, "r") 
     2ids[name] = f.read() 
     f.close()   

path3 = "/Users/myname/Documents/Data Classifier Files/3/" 

for name in os.listdir(path3): 
    if name[-4:] == '.txt': 
     f = open(path3 + "/" + name, "r") 
     3ids[name] = f.read() 
     f.close()   

path4 = "/Users/myname/Documents/Data Classifier Files/4/" 

for name in os.listdir(path4): 
    if name[-4:] == '.txt': 
     f = open(path4 + "/" + name, "r") 
     4ids[name] = f.read() 
     f.close()   

path5 = "/Users/myname/Documents/Data Classifier Files/5/" 

for name in os.listdir(path5): 
    if name[-4:] == '.txt': 
     f = open(path5 + "/" + name, "r") 
     5ids[name] = f.read() 
     f.close()   

path6 = "/Users/myname/Documents/Data Classifier Files/6/" 

for name in os.listdir(path6): 
    if name[-4:] == '.txt': 
     f = open(path6 + "/" + name, "r") 
     6ids[name] = f.read() 
     f.close()   

path7 = "/Users/myname/Documents/Data Classifier Files/7/" 

for name in os.listdir(path7): 
    if name[-4:] == '.txt': 
     f = open(path7 + "/" + name, "r") 
     7ids[name] = f.read() 
     f.close()   

path8 = "/Users/myname/Documents/Data Classifier Files/8/" 

for name in os.listdir(path8): 
    if name[-4:] == '.txt': 
     f = open(path8 + "/" + name, "r") 
     8ids[name] = f.read() 
     f.close() 

path9 = "/Users/myname/Documents/Data Classifier Files/9/" 

for name in os.listdir(path9): 
    if name[-4:] == '.txt': 
     f = open(path9 + "/" + name, "r") 
     9ids[name] = f.read() 
     f.close()   

def word_feats(words): 
    return dict([(word, True) for word in words.split() if word not in stopset]) 

1_feats = [(word_feats(f), '1') for f in 1ids ] 
2_feats = [(word_feats(f), "2") for f in 2ids ] 
3_feats = [(word_feats(f), '3') for f in 3ids ] 
4_feats = [(word_feats(f), '4') for f in 4ids ] 
5_feats = [(word_feats(f), '5') for f in 5ids ] 
6_feats = [(word_feats(f), '6') for f in 6ids ] 
7_feats = [(word_feats(f), '7') for f in 7ids ] 
8_feats = [(word_feats(f), '8') for f in 8ids ] 
9_feats = [(word_feats(f), '9') for f in 9ids ] 

trainfeats = 1_feats + 2_feats + 3_feats + 4_feats + 5_feats + 6_feats + 7_feats + 8_feats + 9_feats 
classifier = NaiveBayesClassifier.train(trainfeats) 

print classifier.classify(word_feats("")) 

答えて

1

何かがここで間違っていただければ幸いです。

1_feats = [(word_feats(f), '1') for f in 1ids ] 
2_feats = [(word_feats(f), "2") for f in 2ids ] 
3_feats = [(word_feats(f), '3') for f in 3ids ] 
4_feats = [(word_feats(f), '4') for f in 4ids ] 
5_feats = [(word_feats(f), '5') for f in 5ids ] 
6_feats = [(word_feats(f), '6') for f in 6ids ] 
7_feats = [(word_feats(f), '7') for f in 7ids ] 
8_feats = [(word_feats(f), '8') for f in 8ids ] 
9_feats = [(word_feats(f), '9') for f in 9ids ] 

あなたがのようにPythonで辞書を反復処理、あなたがキーを反復処理しています。あなたの場合は、ファイルの実際の内容ではなく、ファイル名を繰り返し処理しています。

クイックフィックス:

1_feats = [(word_feats(1ids[f]), '1') for f in 1ids ] 
関連する問題