現在、チケット システムから 2 つの列を持つ CSV エクスポートがあります。
簡単な説明とクラス。
どちらも、チケットをログに記録するときにエージェントによって作成されます。例えば
- データのバックアップが機能していません,バックアップ
- グループ、メモのメールの変更
- バックアップ ディレクトリが見つかりません,バックアップ
- メール > グローバル - Lotus Notes,Notes
Python を使用して Naive Bayes プログラムを作成するように依頼されました。このプログラムは、CSV ファイルの短い説明を読み取り、それを分類する方法を決定します。
6 つの異なるクラスに分類された 329 枚のチケットがあります。
それぞれのカウントは次のとおりです。
- クラス1 60
- クラス2 77
- クラス3 65
- クラス4 16
- クラス5 18
- Class6 93
通常の !"£$%^&*()<>,./?:;@' を除く、短い説明で使用されるすべての単語を含む 6 つの異なる辞書 (クラスごとに 1 つ) を作成する必要があると考えていました。 #~][{}
次に、プログラムを実行すると、nltk を使用して短い説明をトークン化し、それをすべての辞書と比較して、最も一致するものがあればクラスを決定します。
私はこれを正しい方法で行っていますか?サンプルには何枚のチケットを使用すればよいですか?
以下は私が現時点で持っているものです。基本的に、クラスにちなんで名付けられたcsvファイルを実行し、句読点を削除した別のファイルを出力します。すべての単語は小文字で個別のセルです。このデータは辞書として使用されます。私がこのすべてを正しい方法で行っているかどうかはわかりません。
import csv
from nltk.tokenize import RegexpTokenizer
#Read CSV
readFile = open ('Backup.csv', 'r')
csv.readFile = csv.reader(readFile)
resultFile = open ('result.csv', 'w')
wr = csv.writer(resultFile)
#removes punctuation
tokenizer = RegexpTokenizer(r'\w+')
#for every row in file tokenize and covert to lowercase
#write tokenized words to a .csv file.
for row in csv.readFile:
wr.writerow(tokenizer.tokenize(row[0].lower()))
readFile.close()
resultFile.close()
編集: 2列のcsvファイルからデータを取り込む次の使用を開始しました:
from textblob.classifiers import NaiveBayesClassifier
from textblob import TextBlob
with open('train.csv', 'r') as fp:
cl = NaiveBayesClassifier(fp, format="csv")
print(cl.classify("backup")) # "Backup"
print(cl.classify("Lotus Notes.")) #"Lotus"
etc..
確かに、トレーニング データとテスト データのより良いサンプル サイズを取得する必要があるだけで、短い説明の csv をフィードして、計算されたクラスで更新します。
機能の観点からは、明らかな間違いを犯していない限り、機能しているように見えますか?