smf2010/forest
0
1from flask import Flask, render_template, request2import os3import jieba4from sklearn.feature_extraction.text import TfidfVectorizer5from sklearn.metrics.pairwise import cosine_similarity6 7app = Flask(__name__)8 9 10def load_sentences(text):11 return text.split("。")12 13 14def tokenize(sentences):15 tokenized_sentences = []16 for sentence in sentences:17 tokens = jieba.lcut(sentence)18 tokenized_sentences.append(" ".join(tokens))19 return tokenized_sentences20 21 22def tfidf_vectorize(tokenized_sentences):23 vectorizer = TfidfVectorizer()24 tfidf_matrix = vectorizer.fit_transform(tokenized_sentences)25 return tfidf_matrix, vectorizer26 27 28def cosine_similarity_score(query, tfidf_matrix, vectorizer):29 query_vector = vectorizer.transform([query])30 similarity_scores = cosine_similarity(query_vector, tfidf_matrix)31 return similarity_scores32 33 34@app.route('/', methods=['GET', 'POST'])35def index():36 if request.method == 'POST':37 query = request.form['query']38 text = request.form['text']39 sentences = load_sentences(text)40 tokenized_sentences = tokenize(sentences)41 tfidf_matrix, vectorizer = tfidf_vectorize(tokenized_sentences)42 43 query_tokens = jieba.lcut(query)44 query_tokens = " ".join(query_tokens)45 46 similarity_scores = cosine_similarity_score(query_tokens, tfidf_matrix,47 vectorizer)48 sorted_scores_indices = similarity_scores.argsort()[0][::-1]49 50 result = []51 for index in sorted_scores_indices:52 if similarity_scores[0][index] != 0.0:53 if similarity_scores[0][index] > 0.3:54 result.append((sentences[index], round(similarity_scores[0][index],55 2)))56 57 return render_template('index.html', result=result)58 return render_template('index.html')59 60 61if __name__ == '__main__':62 app.run(host='0.0.0.0', port=7860)63 