我正在构建一个文本解析器来识别包含文本的犯罪类型。我的课程是为了加载2个csv文件的文本而构建的(一个文件用于训练,一个文件用于测试)。它的构建方式是我班级中的方法,用于在文本中快速处理,删除停用词,提取特征向量等。请遵循以下代码。
def classificaTexto(tweet):
On Main我使用正常的Naive Bayes并看到它们的准确性,然后使用交叉验证的Naive Bayes并看到它们的准确性。现在我想测试已经训练过的包含测试文本的朴素贝叶斯。如果是,在测试的基础上测试排序。
我的方法texto1 = 'Enviado por um seguidor: Carro roubado no conjunto Augusto Franco'
classificaTexto(texto1)
。它只是做这项工作,但我甚至无法使用已经训练过的分类器。如果我创建一个文本
def classificaTexto(tweet):
该方法将完成其工作并进行排序。
其他信息:
我的csv就是这样形成的。一个例子:
文本前面的数字代表犯罪团队。这样做是为了可以使用该方法|1|,|Enviado por um seguidor :Exclusivo.Bom dia.2 caras vestidos de palhaços ontem a noite roubaram as armas dos guardas municipais que faziam a segurança do posto médico aqui no bairro Coroa do Meio!! Polícia nas ruas a procura dos marginais !!! Surreal isso...|,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|2|,|Enviado por um seguidor :Segundo informações acaba de acontecer um homicídio na cidade de Malhador no povoado Boqueval \,vítima de pré nome Ronaldo.|,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
namespace DataSourceContracts
{
using System.ServiceModel;
using System.ServiceModel.Web;
using ViewModel.DataSource;
/// <summary>
/// This is same as the exposed BLDB data REST service in abother project we need to keep both in sync.
/// The reason for not refering to the same project is the .Net framework version
/// </summary>
[ServiceContract]
public interface IBLDBService : IDataSourceService
{
/// <summary>
/// Sample method
/// </summary>
/// <param name="viewModel"></param>
/// <returns></returns>
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetBLDBData")]
MetaDataViewModel GetBLDBData(MetaDataViewModel viewModel);
}
}
答案 0 :(得分:1)
您只需要从调用classify()
的同一对象中调用train()
方法。一种方法是将对象作为方法的参数传递:
#Method to classify the text according to the feeling
def classificaTexto(nbc, tweet):
textoProcessado = preProcessamentoText(tweet)
result = nbc.classify(extracaoCaracteristicas(getVetorCaracteristicas(textoProcessado)))
#print result
if (result == 4) :
print 'Crime não categorizado - ' + tweet
elif (result == 1):
print 'Roubo - ' + tweet
elif(result == 2):
print 'Homicídio - ' + tweet
elif(result== 3):
print 'Tráfico - ' + tweet
else :
print 'Não representa um crime - ' + tweet
那么你应该能够像这样使用它:
# Main function
if __name__ == '__main__':
#load the 2 set (train and test)
carregarTextos()
test_set()
# Extract the feature vector of all tweets in one go
conjuntoTreino = nltk.classify.util.apply_features(extracaoCaracteristicas, tweets)
# Train the classifier
NBClassifier = nltk.NaiveBayesClassifier.train(conjuntoTreino)
# Classify tweet
texto1 = 'Enviado por um seguidor: Carro roubado no conjunto Augusto Franco'
classificaTexto(NBClassifier, texto1)
<强>更新强>
如果您想对nltk.classify.util.apply_features()
的输出进行分类,可以稍加修改classificaTexto()
:
def classificaTexto(nbc, data):
for features in data:
result = nbc.classify(features)
#print result
if (result == 4) :
print 'Crime não categorizado - ' + tweet
elif (result == 1):
print 'Roubo - ' + tweet
elif(result == 2):
print 'Homicídio - ' + tweet
elif(result== 3):
print 'Tráfico - ' + tweet
else :
print 'Não representa um crime - ' + tweet
并像这样使用它:
# Main function
if __name__ == '__main__':
#load the 2 set (train and test)
carregarTextos()
test_set()
# Extract the feature vector of all tweets in one go
conjuntoTreino = nltk.classify.util.apply_features(extracaoCaracteristicas, tweets)
conjuntoTeste = nltk.classify.util.apply_features(extracaoCaracteristicas,testset)
# Train the classifier
NBClassifier = nltk.NaiveBayesClassifier.train(conjuntoTreino)
# Classify testset
classificaTexto(NBClassifier, conjuntoTeste)
如果您希望立即将结果存储在
中,也可以使用results = nbc.classify_many(data)
list