Skip to main content

A Python wrapper for the RuWordNet thesaurus.

Project description

python-ruwordnet

This is a Python wrapper for the RuWordNet thesaurus.

Это питонячья обёртка для тезауруса RuWordNet.

В настоящий момент поддержана версия 2021 года (RuWordNet 2.0): 59905 синсетов (смысловых групп), 154111 значений слов и словосочетаний.

Аналогичные и связанные проекты:

Что это такое

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, либо переложить его в свою собственную базу данных.

Как запускать

Чтобы воспользоваться тезаурусом, выберите одну из двух опций:

  1. Либо клонируйте этот репозиторий;
  2. Либо установите пакет и скачайте файл с тезаурусом (около 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="ЗЕЛЕНЫЙ ГОРОШЕК"),
# ...

Больше примеров использования есть в .ipynb файлах в данном репозитории.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruwordnet-0.0.5.tar.gz (15.2 kB view details)

Uploaded Source

File details

Details for the file ruwordnet-0.0.5.tar.gz.

File metadata

  • Download URL: ruwordnet-0.0.5.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for ruwordnet-0.0.5.tar.gz
Algorithm Hash digest
SHA256 c3ba3cf1b322a7d1ceeab25d5ddd19164b1e7227160d922f80836b6dfaa94bce
MD5 18f9cbca05ee52adc51c6e644429d397
BLAKE2b-256 216af37d55799f4ee073a1c073363c941751241e72abfe22cb41cbc1d670ca8e

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page