machineLearning을 통해 무슨나라 언어인지 맞추기

2018. 4. 22. 01:05Python-이론/python-인공지능

머신러닝을 이용해서 언어 판별하기



각 나라의 언어 마다 알파벳이 쓰이는 특징들이 있습니다. 이특징들을 머신러닝을 통해 구분해서 훈련시켜보겠습니다.



from sklearn import svm, metrics
import json, os.path, glob, re

#파일 읽어와서 확인하는
def checkLang(filename):
    base = os.path.basename(filename)
    label = re.match('^[a-z]{2,}',base).group()
    with open(filename ,'r',encoding= 'utf-8') as fp:
        text = fp.read()
    text = text.lower()
    lang_dict = [0 for n in range(0,26)]
    ord_a = ord('a')
    ord_z = ord('z')
    for f in text:
        ch = ord(f)
        if ord_a <= ch <= ord_z:
            lang_dict[ch-ord_a] += 1
    total = sum(lang_dict)
    return (list(map(lambda n : n/total,lang_dict)),label)


def load_file(filename):
    label = []
    data = []
#전체 파일 리스트
    fileList = glob.glob(filename)
    for f in fileList:
        fileData = checkLang(f)
        label.append(fileData[1])
        data .append(fileData[0])
    return (data,label)


study_data  = load_file('./lang/train/*.txt')
test_data  = load_file('./lang/test/*.txt')
clf = svm.SVC()

clf.fit(study_data[0],study_data[1])
pre = clf.predict(test_data[0])
score = metrics.accuracy_score(pre,test_data[1])
report = metrics.classification_report(pre,test_data[1])
print(score)
print(report)