2017-12-13 6 views
-5

私は学校プロジェクトのためにPythonでチャットボットをやっています。それは簡単なことです:私は質問をして、すべての質問と回答でtxtファイルを検索します持っていて、答えてくれます。 私がしたいことは、データベース内で最も類似した質問をどのように検索できるかを知ることです。Pythonでもっともよく似た文字列を検索

+1

アルゴリズムを実装します。お役に立てれば! –

+0

http://idownvotedbecau.se/noattempt/(ジョーク:Rick&Mortyを見て、あなたのIQはこの問題を解決するのに十分な高さでなければなりません) – byxor

+0

コードを追加して、働いていることを示してから、あなたの問題。 – IMCoins

答えて

0

最も簡単なことは、fuzzywuzzyのような文字列類似パッケージを使用することです。 Pythonの標準ライブラリであるdifflibを使用しています。以下は

は、あなたのユースケースのためのサンプルコードです:

from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 

query = 'user query' 
options = [list of all questions in your file] 
result = process.extractOne(query, options) 
# result will contain best matching option and it's confidence score 

を繰り返しますが、これを行うには非常に多くのより良い方法がありますが、私はこれが最も簡単だと思います。

+0

答えをありがとう私はこの記事を忘れてしまった。私は結婚式のマッチャーとLevenshtein – Obsession

1

私はこれを投稿していたことを忘れていましたが、誰かがそれを使いたい場合はコードとその作業を行い、SequenceMatcherとLevenshteinアルゴリズムを使用しました。

def startChatBot(): 
cls() 
ExitFlag = 0 
while (ExitFlag != 1): 
    print('Write Exit to return to menu!!') 
    FoundFlag = 0   
    Q = input("What is your question? \n") 
    if (Q=='Exit'): 
     ExitFlag=1 
     main() 
    elif (Q== 'Que horas são?'): 
     print(datetime.datetime.now()) 
    else: 
     bestRatio = 0 
     BestDist = 40000 
     #SequenceMatcher 
     for item in database: 
      if SequenceMatcher(None, item, Q).ratio()>AcceptanceRatio and SequenceMatcher(None, item, Q).ratio()>bestRatio: 
        squenceactual = SequenceMatcher(None, item, Q).ratio() 
        bestRatio = squenceactual 
        print('SquenceMatcher Found a better answer in the database with ratio of', bestRatio) 
        S = database.index(item)   
        print(database[S+1]) 
        FoundFlag = 1 
     #Levenshtein    
     for item in database: 
      actualDistance = distance(Q, item) 
      if (actualDistance < BestDist): 
       BestDist = actualDistance 
       Solution = database.index(item) 
       print('Levenshtein found a better answer in the database with distance of', BestDist) 
       FoundFlag = 1 
     print(database[Solution+1]) 


     if FoundFlag == 0: 
      print('Answer not found!\n') 
      print('Can you add an answer?\n') 
      k = input('Y for yes N for no\n') 
      if k== 'Y' or k=='y': 
       correct = input('what is the correct answer? \n') 
       with open("BasedeDados.txt", "a") as file: 
         file.write('#') 
         file.write(Q) 
         file.write('#') 
         file.write(correct) 
       #close and reopen database     
       openFile() 

     elif FoundFlag == 1: 
      h = input('Was this the correct answer? Y-Yes N-No \n') 
      if h == 'n' or h =='N': 
       correct = input('what is the correct answer? \n') 
       with open("BasedeDados.txt", "a") as file: 
        file.write('#') 
        file.write(Q) 
        file.write('#') 
        file.write(correct) 
       #reopen datababse 
       openFile() 
関連する問題