多语种检测

# -*- coding: utf-8 -*-
"""
Created on Sun Mar 25 22:02:48 2018

@author: Administrator
"""


import re

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB


class LanguageDetector():
    # MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
    def __init__(self, classifier=MultinomialNB()):
        self.classifier = classifier
        self.vectorizer = CountVectorizer(
        lowercase=True,     # lowercase the text
        analyzer='char_wb', # tokenise by character ngrams
        ngram_range=(1,2),  # use ngrams of size 1 and 2
        max_features=1000,  # keep the most common 1000 ngrams
        preprocessor=self._remove_noise
        )
    #模型要有好效果,数据质量要保证,我们用正则表达式,去掉噪声数据
    def _remove_noise(self, document):
        noise_pattern = re.compile("|".join(["http\S+", "\@\w+", "\#\w+"]))
        clean_text = re.sub(noise_pattern, "", document)
        return clean_text

    def features(self, X):
        return self.vectorizer.transform(X)

    def fit(self, X, y):
        self.vectorizer.fit(X)
        self.classifier.fit(self.features(X), y)

    def predict(self, x):
        return self.classifier.predict(self.features([x]))

    def score(self, X, y):
        return self.classifier.score(self.features(X), y)
in_f = open('data.csv')
lines = in_f.readlines()
in_f.close()
dataset = [(line.strip()[:-3], line.strip()[-2:]) for line in lines]
x, y = zip(*dataset)
#把原数据集分成训练集的测试集,咱们用sklearn自带的分割函数。参数解释:
#train_data:所要划分的样本特征集
#train_target:所要划分的样本结果
#test_size:样本占比,如果是整数的话就是样本的数量
#random_state:是随机数的种子。
#随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
#随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
#种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1)
print(len(x_train))
print(len(x_test))
print(len(y_train))
print(len(y_test))
language_detector = LanguageDetector()
language_detector.fit(x_train, y_train)
print(language_detector.predict('nice to meet you'))
print(language_detector.score(x_test, y_test))
 

猜你喜欢

转载自blog.csdn.net/qq_41424519/article/details/81740448