외부 라이브러리 없이 Python에서 문장 간의 코사인 유사성을 계산하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-10-30 07:48:28
원래의
520명이 탐색했습니다.

How to Calculate Cosine Similarity Between Sentences in Python Without External Libraries?

문장 문자열 간 코사인 유사성 계산

문장을 나타내는 두 문자열이 주어지면 외부 라이브러리를 사용하지 않고 코사인 유사성을 계산해야 합니다. 이를 달성하기 위해 Python 구현을 살펴보겠습니다.

코사인 유사성은 일반적으로 벡터 공간에서 문서나 문장을 나타내는 두 벡터 사이의 각도를 측정합니다. 코사인 유사성 값이 높으면 문장이 유사하다는 뜻이고, 값이 낮으면 다르다는 뜻입니다.

1단계: 토큰화 및 벡터화

코사인 유사성을 계산하려면 문장을 벡터로 변환해야 합니다. 우리는 문장을 단어로 분할하고 그 발생 횟수를 계산하는 간단한 단어 기반 토크나이저를 사용합니다.

<code class="python">import re
from collections import Counter

WORD = re.compile(r"\w+")

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)</code>
로그인 후 복사

2단계: 코사인 유사성 계산

코사인 유사성 공식 is:

cosine = (Numerator) / (Denominator)
로그인 후 복사

여기서:

  • 분자는 두 벡터의 내적입니다.
  • 분모는 두 벡터의 크기의 곱입니다.
<code class="python">import math

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])

    sum1 = sum([vec1[x] ** 2 for x in list(vec1.keys())])
    sum2 = sum([vec2[x] ** 2 for x in list(vec2.keys())])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)

    if not denominator:
        return 0.0
    else:
        return float(numerator) / denominator</code>
로그인 후 복사

3단계: 사용 예

위 함수를 사용하여 두 문장 사이의 코사인 유사성을 계산할 수 있습니다.

<code class="python">text1 = "This is a foo bar sentence."
text2 = "This sentence is similar to a foo bar sentence."

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print("Cosine:", cosine)</code>
로그인 후 복사

출력 결과는 높은 코사인 유사도 값을 보여 문장이 유사하다는 것을 나타냅니다.

위 내용은 외부 라이브러리 없이 Python에서 문장 간의 코사인 유사성을 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!