Kesalahan saat mencetak definisi gloss dengan python

Saya memiliki daftar synset berikut dengan python:

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

dan saya mencoba menggabungkan definisi gloss individu dengan cara berikut:

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

Tapi itu memberi saya kesalahan berikut:

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

Tapi jika aku melakukannya

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

Ini berjalan dengan sukses dan memberikan hasil yang benar. Tolong beritahu saya apa yang harus saya lakukan?


person Madhusudan    schedule 07.04.2014    source sumber
comment
Saya memiliki kumpulan synset berikut di python. Itu bukan kumpulan synset. Itu daftar string. Mungkin Anda bermaksud mengetik setiap elemen tanpa tanda kutip.   -  person Kevin    schedule 07.04.2014
comment
@Kevin Jika saya menggunakan setiap elemen melalui loop for maka diakses tanpa tanda kutip ganda. Lalu apa masalahnya?   -  person Madhusudan    schedule 07.04.2014
comment
Anda mengacaukan daftar string yang berisi karakter dengan objek synset aktual dengan Python (yang representasi cetaknya mungkin sama dengan string tersebut; tetapi itu tidak mengubah string menjadi objek tipe lain).   -  person tripleee    schedule 07.04.2014


Jawaban (1)


Pertanyaan: Mengapa Anda memiliki objek Synsets sebagai string?

Objek string asli di python tidak memiliki atribut definition, mereka hanya memiliki fungsi/atribut berikut: https://docs.python.org/2/library/string.html

Yang Anda perlukan adalah objek Synset dari NLTK, lihat http://www.nltk.org/_modules/nltk/corpus/reader/wordnet.html

Kembali ke kode Anda, yang Anda perlukan adalah key untuk mengakses Synsets, mis. 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']

Kemudian dengan kunci melemparkannya ke objek 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')]

Kemudian Anda dapat mengakses definisi dari 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