Quero verificar em um programa Python se uma palavra está no dicionário de inglês.
Acredito que a interface nltk wordnet possa ser o caminho a seguir, mas não tenho idéia de como usá-la para uma tarefa tão simples.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
No futuro, talvez eu queira verificar se a forma singular de uma palavra está no dicionário (por exemplo, propriedades -> propriedade -> palavra em inglês). Como eu conseguiria isso?
/usr/share/dict/
e/var/lib/dict
pode ser referenciado nas configurações * nix.Não funcionará bem com o WordNet, porque o WordNet não contém todas as palavras em inglês. Outra possibilidade baseada no NLTK sem encantar é o corpus de palavras do NLTK
fonte
set(words.words())
Usando o NLTK :
Você deve consultar este artigo se tiver problemas para instalar o wordnet ou quiser tentar outras abordagens.
fonte
Usar um conjunto para armazenar a lista de palavras, pois sua busca será mais rápida:
Para responder à segunda parte da pergunta, os plurais já estariam em uma boa lista de palavras, mas se você quisesse especificamente excluí-los da lista por algum motivo, poderia escrever uma função para lidar com isso. Mas as regras de pluralização em inglês são complicadas o suficiente para incluir apenas os plurais na lista de palavras.
Quanto a onde encontrar listas de palavras em inglês, encontrei várias pesquisando no Google "lista de palavras em inglês". Aqui está um: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Você pode usar o Google para inglês britânico ou americano, se quiser especificamente um desses dialetos.
fonte
english_words
um emset
vez de umlist
,is_english_word
será executado muito mais rápido..xreadlines()
e apenas iterarword_file
.wamerican
ewbritish
fornecem listas de palavras em inglês americano e britânico como/usr/share/dict/*-english
. As informações do pacote fornecem wordlist.sourceforge.net como referência.Para uma solução mais rápida baseada em NLTK, você pode fazer o hash do conjunto de palavras para evitar uma pesquisa linear.
fonte
Acho que existem 3 soluções baseadas em pacotes para resolver o problema. São pyenchant, wordnet e corpus (auto-definidos ou do ntlk). O Pyenchant não pôde ser instalado facilmente no win64 com o py3 . O Wordnet não funciona muito bem porque seu corpus não está completo. Então, para mim, escolho a solução respondida por @Sadik e uso 'set (words.words ())' para acelerar.
Primeiro:
Então:
fonte
Com pyEnchant.checker SpellChecker:
fonte
Para uma abordagem semântica da Web, você pode executar uma consulta sparql no WordNet no formato RDF . Basicamente, basta usar o módulo urllib para emitir a solicitação GET e retornar resultados no formato JSON, analisar usando o módulo python 'json'. Se não for uma palavra em inglês, você não obterá resultados.
Como outra idéia, você pode consultar a API do Wikcionário .
fonte
Para todos os usuários Linux / Unix
Se o seu sistema operacional usa o kernel do Linux, existe uma maneira simples de obter todas as palavras do dicionário inglês / americano. No diretório
/usr/share/dict
você tem umwords
arquivo. Há também um mais específicoamerican-english
ebritish-english
arquivos. Eles contêm todas as palavras nesse idioma específico. Você pode acessar isso em todas as linguagens de programação, e é por isso que pensei que você gostaria de saber sobre isso.Agora, para usuários específicos do python, o código python abaixo deve atribuir as palavras da lista ao valor de cada palavra:
Espero que isto ajude!!!
fonte