Ошибка при печати определений блеска в python

У меня есть следующий список синсетов в python:

string = ["Synset('bank.n.01')", "Synset('computer.n.01')", "Synset('work.v.02')", "Synset('super.a.01')"]

и я пытаюсь объединить определения блеска индивидуума следующим образом:

string1 = ""
for w in string:
     string1 = string1 + w.definition

Но это дает мне следующую ошибку:

Traceback (most recent call last):
   File "<stdin>", line 2, in <module>
AttributeError: 'str' object has no attribute 'definition'

Но если я сделаю

for w in wn.synsets("bank"):
    print w.definition

Он работает успешно и дает правильный результат. Пожалуйста, скажите мне, что мне делать?


person Madhusudan    schedule 07.04.2014    source источник
comment
У меня есть следующий набор синсетов в python. Это не набор синсетов. Это список строк. Возможно, вы хотели ввести каждый элемент без кавычек.   -  person Kevin    schedule 07.04.2014
comment
@Kevin Если я использую каждый элемент через цикл for, то доступ к нему осуществляется без двойных кавычек. Тогда в чем проблема?   -  person Madhusudan    schedule 07.04.2014
comment
Вы путаете список строк, содержащих символы, с фактическими объектами синсета в Python (чье печатное представление может быть равно этим строкам, но это не превращает строки в объекты другого типа).   -  person tripleee    schedule 07.04.2014


Ответы (1)


Вопрос. Почему у вас есть объекты Synsets в виде строк?

Нативные объекты string в python не имеют атрибута definition, у них есть только следующие функции/атрибуты: https://docs.python.org/2/library/string.html

Вам нужен объект Synset из NLTK, см. http://www.nltk.org/_modules/nltk/corpus/reader/wordnet.html

Возвращаясь к вашему коду, вам нужен key для доступа к Synsets, например. bank.n.01:

>>> from nltk.corpus import wordnet as wn
>>> import re
>>> list_of_synsets_in_str = ["Synset('bank.n.01')", "Synset('computer.n.01')", "Synset('work.v.02')", "Synset('super.a.01')"]
>>> losis = list_of_synsets_in_str
>>> [re.findall("'([^']*)'", i)[0] for i in losis]
['bank.n.01', 'computer.n.01', 'work.v.02', 'super.a.01']

Затем с помощью ключа приведите его к объекту Synset:

>>> [wn.synset(re.findall("'([^']*)'", i)[0]) for i in losis]
[Synset('bank.n.01'), Synset('computer.n.01'), Synset('work.v.02'), Synset('ace.s.01')]

Затем вы можете получить доступ к определению из wn.synset(x).defintion():

>>> list_of_synsets = [wn.synset(re.findall("'([^']*)'", i)[0]) for i in losis]
>>> for i in list_of_synsets:
...     print i, i.definition()
... 
Synset('bank.n.01') sloping land (especially the slope beside a body of water)
Synset('computer.n.01') a machine for performing calculations automatically
Synset('work.v.02') be employed
Synset('ace.s.01') of the highest quality
person alvas    schedule 07.04.2014