Найдите в файле предложение, наиболее похожее на предложение ввода | НЛП

Опубликовано: 15 Февраля, 2022

В этой статье мы найдем в файле предложение, наиболее похожее на предложение ввода.

Пример:

 Содержание файла:
"Это фильм".
"Это романтический фильм"
"Это девушка."

Ввод: «Это мальчик».

Аналогичное предложение для ввода: 
«Это девушка», «Это фильм».

Подход:

  1. Создайте список для хранения всех уникальных слов файла.
  2. Преобразуйте все предложения файла в двоичный формат, сравнивая каждое слово с содержимым списка после очистки (удаления стоп-слова, выделения корней и т. Д.)
  3. Преобразуйте входное предложение в двоичный формат.
  4. Найдите количество похожих слов во входном предложении к каждому предложению и сохраните значение в списке, названном индексом сходства.
  5. Найдите максимальное значение индекса сходства и верните предложение, содержащее максимальное количество похожих слов.

Содержание файла:

Code to get a similar sentence:

Python3

from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize, sent_tokenize
import nltk
from nltk.corpus import stopwords
  
  
nltk.download("stopwords")
ps = PorterStemmer()
f = open("romyyy.txt")
a = sent_tokenize(f.read())
  
# removal of stopwords
stop_words = list(stopwords.words("english"))
  
# removal of punctuation signs
punc = """!()-[]{};:"", <>./?@#$%^&*_~"""
s = [(word_tokenize(a[i])) for i in range(len(a))]
outer_1 = []
  
for i in range(len(s)):
    inner_1 = []
      
    for j in range(len(s[i])):
          
        if s[i][j] not in (punc or stop_words):
            s[i][j] = ps.stem(s[i][j])
              
            if s[i][j] not in stop_words:
                inner_1.append(s[i][j].lower())
      
    outer_1.append(set(inner_1))
rvector = outer_1[0]
  
for i in range(1, len(s)):
    rvector = rvector.union(outer_1[i])
outer = []
  
for i in range(len(outer_1)):
    inner = []
      
    for w in rvector:
          
        if w in outer_1[i]:
            inner.append(1)
          
        else:
            inner.append(0)
    outer.append(inner)
comparison = input("Input: ")
  
  
check = (word_tokenize(comparison))
check = [ps.stem(check[i]).lower() for i in range(len(check))]
  
  
check1 = []
for w in rvector:
    if w in check:
        check1.append(1# create a vector
    else:
        check1.append(0)
  
ds = []
  
for j in range(len(outer)):
    similarity_index = 0
    c = 0
      
    if check1 == outer[j]:
        ds.append(0)
    else:
        for i in range(len(rvector)):
  
            c += check1[i]*outer[j][i]
  
        similarity_index += c
        ds.append(similarity_index)
  
  
ds
maximum = max(ds)
print()
print()
print("Similar sentences: ")
for i in range(len(ds)):
  
    if ds[i] == maximum:
        print(a[i])

Выход:

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.