ngram으로 문장 비교하기

2018. 5. 20. 15:32Python-이론/python-인공지능

n-gram으로 문장 비교하기


앞서 했던 레벤슈타인의 최단거리는 각 글자들을 비교했는데 n-gram은 문장을 n개 만큼 토막내서 비교하는 것을 의미한다. 예를 들어서 


만약 n이 2라면 

"오늘 강남에서 맛있는 스파게티를 먹었다. "를 


"오늘", "늘 ", " 강", "강남", "남에", "에서", "서 ", " 맛", "맛있", "있는", "는 ", " 스", "스파", "파게", "게티", "티를", "를 ", " 먹", "먹었", "었다"

2글자씩 나누어서 두문장을 비교해준다. 



def ngram(text,i):
    result = []
    for a in range(len(text) -i +1):
        result.append(text[a:a+i])
    return result

def getAccuracy(aText, bText, num):
    aResult = ngram(aText,num)
    bResult = ngram(bText,num)
    cnt = 0
    r = []
    for i in aResult:
        for j in bResult:
            if i == j:
                cnt += 1
                r.append(i)
    return cnt / len(aResult), r

aText = "오늘 강남에서 맛있는 스파게티를 먹었다."
bText = "강남에서 먹었던 오늘의 스파게티가 맛있었다."

accuracy,result = getAccuracy(aText,bText,2)
print(result)
print(accuracy)