python-ruwordnet
This is a Python wrapper for the RuWordNet thesaurus.
Это питонячья обёртка для тезауруса RuWordNet.
В настоящий момент поддержана версия 2021 года (RuWordNet 2.0): 59905 синсетов (смысловых групп), 154111 значений слов и словосочетаний.
Аналогичные и связанные проекты:
- https://www.nltk.org/howto/wordnet.html (оригинальный английский Wordnet)
- https://github.com/jamsic/ru-wordnet (русский тезаурус, выкачанный из wiktionary)
- https://nlpub.ru/Russian_Distributional_Thesaurus#Гиперонимы (русский тезаурус, собранный автоматическими эвристиками в большом корпусе)
Что это такое
RuWordNet --- это один из немногих тезаурусов для русского языка.
Тезаурус --- это машиночитаемый словарь какого-то языка, составленный лингвистами и содержащий информацию о связях между словами.
RuWordNet разбит на синсеты --- наборы синонимичных слов и словосочетаний. Между синсетами установлены бинарные отношения, такие, как гипоним-гипероним, то есть "частное-общее". Например, "спаржа" является частным случаем "овощей". Такая разметка на синонимы и гиперонимы позволяет устанавливать отношения между словами с большей надёжностью (по крайней мере, в теории), чем при помощи word2vec и прочей дистрибутивной семантики.
Основными сущностями в тезаурусе являются Sense (смысл) - одно конкретное
слово или словосочетание с конкретным же значением, а также Synset (синсет) -
множество сущностей Sense с одинаковыми значениями и с одной частью речи.
Части речи поддержано три: существительное N, глагол V, и прилагательное A.
Некоторые Sense состоят из нескольких слов, и часть речи им присваивается
по главному слову.
В текущей версии тезауруса поддержаны следующие отношения между синсетами:
hyponyms/hypernyms: более частные и более общие понятия, например, "спаржа" / "овощи"domains/domain_items: домены и их атрибуты, например, "спорт" / "мяч"meronyms/holonyms: части и целые, например, "желудь" / "дуб"classes/instances: классы и экземпляры, например, "Смоленск" / "областной центр"premises/conclusions: предпосылки и возможные выводы из них, например, "прибежать" / "бегать" (поддержано только для глаголов)causes/effects: причины и следствия, например, "толпиться" / "переснимать" (только для глаголов)pos_synonyms: синонимы из других частей речиantonyms: антонимыrelated: прочие смысловые связи, например, "овощи" / "овощехранилище"ili: interlingual index, то есть аналогичный синсет в другом языке (английском)
Кроме того, есть отношения между смыслами:
words/phrases- из каких слов состоит фраза, и в каких фразах участвует слово, например, "чувство" / "порыв чувств"sources/derivations- от каких слов произошло данное, и какие произошли от него, например, "приятель" / "приятельский"
В данном пакете тезаурус обёрнут в ORM SQLAlchemy. Это значит, что вы можете
скачать его содержимое в виде текстовой базы sqlite, либо переложить его в
свою собственную базу данных.
Как запускать
Чтобы воспользоваться тезаурусом, выберите одну из двух опций:
- Либо клонируйте этот репозиторий;
- Либо установите пакет и скачайте файл с тезаурусом (около 80 мб):
pip install ruwordnet
ruwordnet download
В настоящий момент существует несколько версий тезауруса:
- версия 2020 года содержится в файле
ruwordnet/static/ruwordnet.db, и доступна в версии пакетаruwordnet>=0.0.2. - версия 2021 года (RuWordNet 2.0) содержится в файле
ruwordnet/static/ruwordnet-2021.db, и доступна по умолчанию начиная с версии пакетаruwordnet>=0.0.4. В этой версии увеличился размер словаря и добавились свойстваrelated(произвольная связь с другим синсетом) иili(interlingual index, т.е. связь с английским WordNet) у синсетов.
Для применения пакета нужно создать объект RuWordNet:
from ruwordnet import RuWordNet
wn = RuWordNet()
Если вы не использовали команду ruwordnet download, вы можете самостоятельно
указать путь до файла либо передать в конструктор открытую сессию SQLAlchemy:
from ruwordnet import RuWordNet
wn = RuWordNet(filename_or_session='ruwordnet/static/ruwordnet-2021.db')
После этого можно, например, искать синсеты, в которые входит слово
for sense in wn.get_senses('замок'):
print(sense.synset)
# Synset(id="126228-N", title="СРЕДНЕВЕКОВЫЙ ЗАМОК")
# Synset(id="114707-N", title="ЗАМОК ДЛЯ ЗАПИРАНИЯ")
Для каждого синсета можно глядеть на гиперонимы...
wn.get_senses('спаржа')[0].synset.hypernyms
# [Synset(id="348-N", title="ОВОЩИ"),
# Synset(id="4789-N", title="ТРАВЯНИСТОЕ РАСТЕНИЕ"),
# Synset(id="6878-N", title="ОВОЩНАЯ КУЛЬТУРА")]
... или, наоборот, на гипонимы
vegetables = wn.get_senses('спаржа')[0].synset.hypernyms[0]
vegetables.hyponyms
# [Synset(id="107993-N", title="АРТИШОК"),
# Synset(id="108482-N", title="СПАРЖА"),
# Synset(id="118660-N", title="ЗЕЛЕНЫЙ ГОРОШЕК"),
# ...
Поиск в тезаурусе
Обращаясь к объекту RuWordNet с помощью квадратных скобок, можно извлекать русские и английские
синсеты (по id) и смыслу (по id или тексту).
wn['134045-N']
# Synset(id="134045-N", title="ПОТЕНЦИАЛ (ФИЗИЧЕСКАЯ ВЕЛИЧИНА)")
wn['11493827-n']
# WNSynset(id="11493827-n", definition="the difference in electrical charge between two points in a circuit expressed in volts")
wn['134045-N-189287']
# Sense(id="134045-N-189287", name="ПОТЕНЦИАЛ")
wn['electric_potential%1:19:00::']
# WNSense(key="electric_potential%1:19:00::", name="electric_potential")
wn['потенциал']
# [Sense(id="134045-N-189287", name="ПОТЕНЦИАЛ"), Sense(id="134046-N-189287", name="ПОТЕНЦИАЛ")]
wn['potential']
# [WNSense(key="potential%1:19:00::", name="potential"), WNSense(key="potential%3:00:00::", name="potential"), WNSense(key="potential%1:26:00::", name="potential")]
Кроме этого, есть специальные методы для поиска русских или английских синсетов и значений.
wn.get_synset_by_id("134045-N")
wn.get_en_synset_by_id("11493827-n")
wn.get_senses('потенциал')
wn.get_synsets('потенциал')
wn.get_en_senses('potential')
wn.get_en_synsets('potential')
Предупреждение: для английского WordNet представлены не все элементы, а только связанные с RuWordNet.
Больше примеров использования есть в .ipynb файлах в данном репозитории.
Metadata
Release files for ruwordnet 0.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ruwordnet-0.0.6.tar.gz | 16.4 kB | Without provenance | Details for ruwordnet-0.0.6.tar.gz |
Release files / ruwordnet-0.0.6.tar.gz
| Download URL | ruwordnet-0.0.6.tar.gz |
|---|---|
| Size | 16.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
76dc67b52934dee5900bd0f064b2752be6b5de09e0332168b556fbc7d42cf22b
|
|
BLAKE2b-256 checksum How to use checksums |
37aca5f31f8a26105a5dc3250bf6d574288e3a928c9a8ffe2bc8955e2fb3fded
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/3.10.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.6
|
Security for ruwordnet 0.0.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.