在文件中查找与输入句子最相似的句子 | NLP


自然语言处理 (NLP) 允许计算机解释和分析人类语言。查找与给定输入句子最相同的单词或句子是一个普遍的 NLP 问题。在 Python 中,有多种方法可以查找相同的句子。

所需资源

要完成此操作,您必须在系统中安装 nltk 库。因此,在您的 Python 命令提示符中运行以下命令以安装 nltk。

pip install nltk

如果上述命令无法执行,您也可以在 Windows cmd 中运行以下命令。

python --version
pip --version
pip install nltk

成功安装库后,我们可以在代码中导入它,并使用 nltk 中的各种模块来编写句子查找程序。

示例

我们将创建一个 Python 程序,该程序从用户那里获取输入句子,并从文件中查找最相似的句子。让我们探索如何使用 Python NLTK 包来实现这一点。我们将专门使用 TF-IDF (词频-逆文档频率) 方法和各种 NLP 预处理步骤。

算法

步骤 1:安装并导入 NLTK。您可以使用上面解释的任何方法。

步骤 2:编写代码以从文件中加载句子。加载句子,然后处理它们以生成预处理句子的列表,每个句子都去除任何前导或尾随空格。

步骤 3:处理输入句子和文件的已去除空格的句子。

步骤 4:执行分词以将每个句子分解成单词。

步骤 5:从句子中删除停用词以比较主要单词。

步骤 6:比较单词并为它们分配权重以查找权重最高的单词。这样做,您可以找到文件中最相似的句子。

示例

import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from sklearn.feature_extraction.text import TfidfVectorizer

# Download NLTK resources
nltk.download('stopwords')
nltk.download('punkt')
nltk.download('wordnet')

# Load the file containing sentences
def load_sentences(file_path):
   with open(file_path, 'r') as file:
    sentences = file.readlines()
   return [sentence.strip() for sentence in sentences]

# Preprocess the input sentence
def preprocess_sentence(sentence):
   # Tokenize
   tokens = word_tokenize(sentence.lower())
   
   # Remove stopwords
   stop_words = set(stopwords.words('english'))
   tokens = [token for token in tokens if token not in stop_words]
   
   # Lemmatize
   lemmatizer = WordNetLemmatizer()
   tokens = [lemmatizer.lemmatize(token) for token in tokens]
   
   return ' '.join(tokens)

# Get the most similar sentence
def get_most_similar_sentence(user_input, sentences):
   # Preprocess input sentence
   preprocessed_user_input = preprocess_sentence(user_input)
   
   # Preprocess sentences
   preprocessed_sentences = [preprocess_sentence(sentence) for sentence in 
sentences]
   
   # Create TF-IDF vectorizer
   vectorizer = TfidfVectorizer()
   
   # Generate TF-IDF matrix
   tfidf_matrix = vectorizer.fit_transform([preprocessed_user_input] + 
preprocessed_sentences)
   
   # Calculate similarity scores
   similarity_scores = (tfidf_matrix * tfidf_matrix.T).A[0][1:]
   
   # Find the index of the most similar sentence
   most_similar_index = similarity_scores.argmax()
   most_similar_sentence = sentences[most_similar_index]
   
   return most_similar_sentence

# Main program
def main():
   file_path = 'sentences.txt'  # Path to the file containing sentences
   sentences = load_sentences(file_path)
   
   user_input = 'hello I am a women' 
   
   most_similar_sentence = get_most_similar_sentence(user_input, sentences)
   print('Most similar sentence:', most_similar_sentence)

if __name__ == '__main__':
   main()

文本文件内容:Sentences.txt

这是一部喜剧电影。

这是一部恐怖电影。

你好,我是一个女孩。

你好,我是一个男孩。

输出

结论

我们已经体验了使用 NLTK 库和 NLP 方法来发现与给定输入文本最相似的句子的方法。通过使用 TF-IDF 方法和诸如分词、停用词去除和词形还原之类的预处理技术,我们可以有效地比较句子并找到最接近的匹配。

您可以在任何应用程序或程序中使用这种方法来添加句子相似性检查功能,该功能可用于关联用户输入的有用信息。

更新于:2023年8月10日

444 次查看

启动您的职业生涯

通过完成课程获得认证

开始
广告