ABOUT ME

자아찾기를 이제 시작한 직장인의 블로그

Today
Yesterday
Total
  • n-gram을 이용해서 철자를 교정해보자
    Archive/통계&코딩이것저것 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]]
Designed by Tistory.