Хобрук: Ваш путь к мастерству в программировании

Преобразование тегов POS из TextBlob в входные данные, совместимые с Wordnet

Я использую Python и nltk + Textblob для анализа текста. Интересно, что вы можете добавить POS для wordnet, чтобы сделать поиск синонимов более конкретным, но, к сожалению, теги как в nltk, так и в Textblob не «совместимы» с тем вводом, который wordnet ожидает для своего класса synset.

Пример Wordnet.synsets() требует, чтобы POS, который вы ему предоставляете, был одним из n, v, a, r, например

wn.synsets("dog", POS="n,v,a,r")

Но стандартная POS-тегировка от upenn_treebank выглядит так:

JJ, VBD, VBZ, etc.

Поэтому я ищу хороший способ конвертировать между ними.

Кто-нибудь знает хороший способ сделать это преобразование, кроме грубой силы?

26.07.2014

  • Не могли бы вы объяснить больше о несовместимости? 27.07.2014
  • Типа приведите примеры... 27.07.2014
  • Ответ ниже отличный - я добавил несколько примеров, чтобы люди, наткнувшиеся на этот пост, могли понять, в чем проблема. 28.07.2014

Ответы:


1

Если textblob использует набор тегов PennTreeBank (ptb), то просто используйте первый символ в теге POS для сопоставления с тегом POS WN.

Набор тегов WN POS включает в себя «a» = прилагательное/наречие, «s» = вспомогательное прилагательное, «n» = существительные и «v» = глаголы.

пытаться:

>>> from nltk import word_tokenize, pos_tag
>>> from nltk.corpus import wordnet as wn
>>> text = 'this is a pos tagset in some foo bar paradigm'
>>> pos_tag(word_tokenize(text))
[('this', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('pos', 'NN'), ('tagset', 'NN'), ('in', 'IN'), ('some', 'DT'), ('foo', 'NN'), ('bar', 'NN'), ('paradigm', 'NN')]
>>> for tok, pos in pos_tag(word_tokenize(text)):
...     pos = pos[0].lower()
...     if pos in ['a', 'n', 'v']:
...             wn.synsets(tok, pos)
... 
[Synset('be.v.01'), Synset('be.v.02'), Synset('be.v.03'), Synset('exist.v.01'), Synset('be.v.05'), Synset('equal.v.01'), Synset('constitute.v.01'), Synset('be.v.08'), Synset('embody.v.02'), Synset('be.v.10'), Synset('be.v.11'), Synset('be.v.12'), Synset('cost.v.01')]
[Synset('polonium.n.01'), Synset('petty_officer.n.01'), Synset('po.n.03'), Synset('united_states_post_office.n.01')]
[]
[]
[Synset('barroom.n.01'), Synset('bar.n.02'), Synset('bar.n.03'), Synset('measure.n.07'), Synset('bar.n.05'), Synset('prevention.n.01'), Synset('bar.n.07'), Synset('bar.n.08'), Synset('legal_profession.n.01'), Synset('stripe.n.05'), Synset('cake.n.01'), Synset('browning_automatic_rifle.n.01'), Synset('bar.n.13'), Synset('bar.n.14'), Synset('bar.n.15')]
[Synset('paradigm.n.01'), Synset('prototype.n.01'), Synset('substitution_class.n.01'), Synset('paradigm.n.04')]
27.07.2014
  • Это именно то, что я искал. Не знал, есть ли лучшее решение, чем просто посмотреть на первый символ, но похоже, что это лучший способ. Спасибо! 28.07.2014
  • Было бы удобнее, если бы была какая-то ссылка, чтобы уточнить, что это наилучшее доступное приближение. 29.06.2015
  • Разве это не неправильно? PTB использует теги, начинающиеся с JJ/RB для прилагательных/глаголов соответственно. Я не проверял это, но кажется, что вам придется сделать следующее: ptb_wn_pos { 'NN' : 'n', 'JJ' : 'a', 'RB' : 'a', 'VB' : 'v' } // pos = pos[0:2] // wn_pos = ptb_wn_pos[pos] Редактировать: Извините, по какой-то причине я не могу вставить новые строки, так что представьте, что символы // являются новыми строками. 27.08.2015
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..