Библиотека Python для поиска правильных английских слов в абзаце - PullRequest
0 голосов
/ 16 октября 2019

У меня есть список абзацев, я хотел бы проверить, являются ли эти слова действительными английскими словами или нет. Иногда, из-за некоторых внешних проблем, я не могу получить действительные английские слова в этих параграфах. Мне известны такие библиотеки, как pyenchant и nltk, которые имеют набор словарей и обеспечивают точность некоторого уровня, но у обеих из них есть несколько недостатков. Интересно, существует ли другая библиотека или процедура, которая может предоставить мне то, что я ищу, с максимально возможной точностью.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Это во многом зависит от того, что вы подразумеваете под действительными английскими словами. Является ли ЭКГ, Тор или Локи правильным английским словом? Если ваше определение допустимых слов отличается от других, вам может потребоваться создать собственную языковую модель. В любом случае, помимо очевидного использования pyEnchant или nltk, я бы предложил библиотеку fasttext. Он имеет несколько предварительно созданных моделей векторов слов, и вы можете проверить свой абзац на наличие редких слов или слов из словаря. По сути, вы хотите проверить, что представление вложения слова для этого конкретного «недействительного» слова соответствует малому числу (или нулю) других слов. Вы можете использовать быстрый текст непосредственно из python

pip install fasstext

или использовать библиотеку gensim (которая также предоставит вам некоторые дополнительные алгоритмы, такие как Word2Vec, которые могут быть полезны и для вашего случая)

pip install --upgrade gensim

Или для conda

conda install -c conda-forge gensim

Предполагается, что вы используете gensim и предварительно обученную модель быстрого текста:

from gensim.models import FastText
from gensim.test.utils import datapath

cap_path = datapath("fasttext-model.bin")
fb_model = load_facebook_model(cap_path)

Теперь вы можете выполнить несколько задач для достижения своей цели:1. Проверьте словарный запас

'mybizarreword' in fb_model.wv.vocab
Проверить сходство
fb_model.wv.most_similar("man")

Для редких слов вы получите низкие оценки и, установив порог, вы решите, какое слово не является «действительным»

0 голосов
/ 17 октября 2019

Linux и Mac OS X имеют список слов, которые вы можете использовать напрямую, в противном случае вы можете скачать список английских слов. Вы можете использовать его следующим образом:

d = {}
fname = "/usr/share/dict/words"
with open(fname) as f:
    content = f.readlines()

for w in content:
    d[w.strip()] = True

p ="""I have a list of paragraphs, I would like to check if these words are valid English words or not. Sometimes, due to some external issues, i might not get valid English words in these paragraphs. I am aware of libraries like pyenchant and nltk which have a set of dictionaries and provide accuracy of some level but both of these have few drawbacks. I wonder if there exists another library or procedure that can provide me with what I am looking for with at-most accuracy possible."""

lw = []
for w in p.split():
    if len(w) < 4:
        continue
    if d.get(w, False):
        lw.append(w)

print(len(lw))
print(lw)

#43
#['have', 'list', 'would', 'like', 'check', 'these', 'words', 'valid', 'English', 'words', 'some', 'external', 'might', 'valid', 'English', 'words', 'these', 'aware', 'libraries', 'like', 'which', 'have', 'dictionaries', 'provide', 'accuracy', 'some', 'level', 'both', 'these', 'have', 'wonder', 'there', 'exists', 'another', 'library', 'procedure', 'that', 'provide', 'with', 'what', 'looking', 'with', 'accuracy']


...