Archive/통계&코딩이것저것
n-gram을 이용해서 철자를 교정해보자
입짧은달님
2021. 9. 2. 15:17
NER을 이용해서 회사명을 추출한 데이터를 사용해서, 정답명과 살짝 틀린 단어(예:Epple)이 들어갔을 때 Apple로 나오게끔 철자를 교정해주는 간단한 코드이다.
df_answer_name['회사명'] : 정상적인 회사명 컬럼이 들어간다.
이 알고리즘의 장점은 간단하다는 것인데, 단점은 df_answer_name['회사명']에 없는 회사는 뱉어내지 못한다는 것.
import collections
ngram_size=3
words=set([w.lower() for w in list(df_answer_name['회사명'])]) #소문자 변환
def ngrams(word):#ngram set을 생성한다.
all_ngrams=set()
for i in range(0,len(word)-ngram_size+1):
all_ngrams.add(word[i:i+ngram_size])
return all_ngrams
ngram_words=collections.defaultdict(set)
for word in words: #ngram (ex. app) 별로 매칭되는 word(ex. apple, appo,..) 들을 저장한다.
for ngram in ngrams(word):
ngram_words[ngram].add(word)
def suggested_words(target_word,results=3):#targetword를 넣으면 해당 워드를 ngram으로 분해한 뒤,
각각의 ngram마다 해당되는 word에 표를 준다. 가장 많은 표를 받은 word가 정확한 회사명..!!
word_ranking=collections.defaultdict(int)
possible_words=set()
for ngram in ngrams(target_word):
words=ngram_words[ngram]
for word in words:
word_ranking[word]+=1
ranked_word_pairs=sorted(word_ranking.keys(),reverse=True)
return [word_pair for word_pair in ranked_word_pairs[0:results]]