마르코프체인을 통해 뒤에 나올 단어 예측해보기
2018. 5. 20. 16:14ㆍPython-이론/python-인공지능
마르코프 체인을 통해 뒤에 나올 단어 예측하기
마르코프 체인은 러시아의 수학자 마르코프의 이름을 따서 만든 알고리즘이다. 주로 물리학과 통계학의 기본모델로 사용되고 있다. 간단하게 설명하자면 과거의 상태는 전혀 신경쓰지 않고 현재의 상태만을 고려하여 다음의 값을 추측하는 것을 의미한다.
만들 방법
1. 각 문장을 한글 형태소로 나눈다.
2. 각 문장의 세단어씩 딕셔너리에 대입 시켜준다.
json 파일로 만들어준다.
3. json 파일을 참조하여 뒤에 무슨 단어가 나올지 추측할 수 있다.
import codecs from bs4 import BeautifulSoup from konlpy.tag import Twitter import json fp = codecs.open('toji.txt','r',encoding='utf-16') word_dic ={} def three_dic(words): threeDic = ["@"] dic = {} for word in words: threeDic.append(word) if len(threeDic) < 3: continue if len(threeDic) > 3: threeDic = threeDic[1:] setWord_dic(threeDic) if word == ".": threeDic= ["@"] def setWord_dic(threeData): s1,s2,s3 = threeData if s1 not in word_dic: word_dic[s1] = {} if s2 not in word_dic[s1]: word_dic[s1][s2]={} if s3 not in word_dic[s1][s2]: word_dic[s1][s2][s3]=0 word_dic[s1][s2][s3] += 1 twitter = Twitter() bsData = BeautifulSoup(fp,'html.parser') body = bsData.select_one('body > text') lines = body.getText() lines = lines.replace("…","") words = [] malist = twitter.pos(lines,norm=True) for word in malist: if word[1] not in ["Punctuation"]: words.append(word[0]) if word[0] == ",": words.append(word[0]) three_dic(words) json.dump(word_dic ,open('markov.json','w',encoding ='utf-8'))
import json text = json.load(open('markov.json','r')) print(text["걱정"],end="\n")
'Python-이론 > python-인공지능' 카테고리의 다른 글
ngram으로 문장 비교하기 (0) | 2018.05.20 |
---|---|
레벤슈타인 거리를 이용해서 두 문장 비교하기 (0) | 2018.05.20 |
다중 퍼셉트론을 이용해서 텍스트 분류하기 (0) | 2018.05.20 |
베이즈의 정리를 통해 텍스트 구분하기 (0) | 2018.05.19 |
word2vec 사용해서 한 단어와 연관된 단어들 찾아보기 (0) | 2018.05.17 |