如果维基百科页面的名称输入不准确,维基百科图书馆会显示错误

Wikipedia Library shows error if input not given exactly to the name of a page of wikipedia

如果我使用语音识别模块发出语音命令以在维基百科中搜索某些内容,如果我没有准确说出它会显示错误。例如:我说(国防学院)没有维基百科页面是这样命名的,但是(国防学院(印度))是一个页面,所以它显示结果。我想根据我的语音命令搜索最近的页面。这是我的代码:

import pyttsx3
import datetime
import speech_recognition as sr
import Wikipedia
import web-browser
import os
engine = pyttsx3.init('sapi5')

voices = engine.getProperty('voices')

engine.setProperty('voice', voices[1].id)
def speak(audio):
    engine.say(audio)
    engine.runAndWait()
def voiceinput():
    r=sr.Recognizer()
    with sr.Microphone() as source:
        print("I am listening")
        r.pause_threshold=1
        audio=r.listen(source)
try:
        print("Recognizing...")
        speak("Recognizing...")
        query=r.recognize_google(audio, language="en-in")
        print(f"You mean {query}\n")
        speak(f"You mean {query}\n")
except Exception as e:
        print("Please repeat")
        speak("please repeat?")
        return "None"
return query
if "search" in query:
    speak("Searching Wikipedia")
    query=query.replace("search", "")
    results=wikipedia.summary(query, sentences=2)
    print("According to Wikipedia")
    print(results)
    speak("According to Wikipedia")
    speak(results)

在这种情况下必须进行类似的搜索。您正在使用 Wikipedia 包,而不是上面标记的 Pywikibot。不管怎样,这里有一个代码片段,说明如何使用 Pywikibot 完成 类似搜索

  >>> from difflib import get_close_matches
  >>> import pywikibot
  >>> site = pywikibot.Site('wikipedia:en')  # create a Site object
  >>> title = 'National Defence Academy'
  >>> gen = site.search('intitle:' + title, total=10, namespaces=0)
  >>> titles = [page.title() for page in gen]  # list of strings required
  >>> result = get_close_matches('National Defence Academy', titles)
  >>> found = pywikibot.Page(site, result[0])

found 是与给定标题最匹配的页面 object。获取其文本:

  >>> found.text[:100]