Как проверить является ли набор букв словом
На вход подаются строки по типу "эйсомош", "эндэди", "ложка". Как понять является ли строка осмысленным словом русского языка?
Ответы (2 шт):
Чтобы распознать именно слова из "нечего" такое навряд ли возможно, но можно установить правила их составления, но тогда "специфические" слова будут не распознаваться
Самая лучшая методика для этого поиск по словарю, так как тут никак не ошибёшся:
listing = []
word = input("Введите слово: ")
if word.upper() in listing:
print("Данное слово присуствует в словаре")
else:
print("Незнаю такого слова, хотите добавить в словарь? (Да или нет)")
if input().upper() == "ДА":
listing.append(input("Введите слово"))
Можно заморочиться и поискать правила насчёт слов и сделать регулярное выражение которое будет вычислять некоторые слов, но это достаточно сложно и может заносить даже бред кроме слов.
Можно и без словаря, через какой-нибудь лексический анализатор, но там не со всеми словами всё будет хорошо, с англицизмами и слэнгом будут проблемы, ну и порог надо подбирать:
# !pip install pymorphy2[fast]
import pymorphy2
lst = ["эйсомош", "эндэди", "ложка", "спрайт", "Владимир", "ололо", "лол", "няка", "няня", "принтер", "козявка", "козябра"]
threshold = 0.75
morph = pymorphy2.MorphAnalyzer()
for word in lst:
p = morph.parse(word)
score = p[0].score
print(f'{word} - {"осмысленное" if score >= threshold else "бред"}')
Вывод:
эйсомош - бред
эндэди - бред
ложка - осмысленное
спрайт - бред
Владимир - осмысленное
ололо - осмысленное
лол - бред
няка - бред
няня - осмысленное
принтер - бред
козявка - осмысленное
козябра - бред
Зато у анализатора хорошо со склонениями и т.п., они ему не сильно мешают, а вот словарь обычно только именительный падеж единственное число понимает.