como descobrir se a string está no dicionário [duplicado]

Aug 28 2020

Quero saber se uma palavra está no dicionário.

Aqui está o que estou tentando.

import requests

def word_in_dictionary(word):
    response = requests.get('https://en.wiktionary.org/wiki/'+word)
    return response.status_code==200

print(word_in_dictionary('potato')) # True
print(word_in_dictionary('nobblebog')) # False

Mas infelizmente o dicionário contém muitas palavras que não são do inglês e eu não quero igualá-las.

print(word_in_dictionary('bardzo')) # WANT THIS TO BE FALSE

Então eu tentei olhar no conteúdo.

def word_in_dictionary(word):
    response = requests.get('https://en.wiktionary.org/wiki/'+word)
    return response.status_code==200 and 'English' in response.content.decode()

Mas ainda estou ficando True. Está encontrando "inglês" em algum lugar na fonte da página, mesmo que a página renderizada não o tenha (nada quando pesquiso com ctrl-F no navegador).

Como posso fazer com que apenas retorne True se estiver realmente listado como tendo um significado em inglês?

Respostas

5 AndrejKesely Aug 28 2020 at 18:10

Olhando para o código HTML, se a palavra for inglês, há tag com id="English". Você pode tentar este código:

import requests
from bs4 import BeautifulSoup


def word_in_dictionary(word):
    response = requests.get('https://en.wiktionary.org/wiki/'+word)
    return response.status_code==200 and bool(BeautifulSoup(response.content, 'html.parser').select_one('#English'))

print(word_in_dictionary('potato')) # True
print(word_in_dictionary('nobblebog')) # False
print(word_in_dictionary('bardzo')) # False