0

我目前从我们的票务系统导出了一个包含两列的 CSV。

简短描述和类别。

两者都是由代理在记录工单时创建的。例如

  • 数据备份不工作,备份
  • Groups,Notes 中的电子邮件更改
  • 找不到备份目录,备份
  • 电子邮件 > 全球 - Lotus Notes,Notes

我被要求使用 Python 编写一个朴素贝叶斯程序,该程序将读取 CSV 文件中的简短描述,然后决定如何对其进行分类。

我有 329 张门票,分为 6 个不同的类别。

以下是每个的计数:

  • 1 级 60
  • 2 类 77
  • 三级 65
  • 第 4 类 16
  • 5级18
  • 6 级 93

我在想我必须创建 6 个不同的字典(每个类一个),其中包含简短描述中使用的所有单词,不包括通常的 !"£$%^&*()<>,./?:;@' #~][{}

然后,当我运行该程序时,它将使用 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()

编辑: 我现在已经开始使用以下内容,它从我的两列 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,然后使用已计算的类对其进行更新。

从功能的角度来看,除非我犯了任何明显的错误,否则它似乎可以工作?

4

0 回答 0