เกิดข้อผิดพลาดขณะพิมพ์คำจำกัดความความเงาใน Python

ฉันมีรายการ synsets ต่อไปนี้ใน 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
ฉันมีชุด synsets ต่อไปนี้ใน python นั่นไม่ใช่ชุดของซินเซ็ต นั่นคือรายการสตริง บางทีคุณอาจต้องการพิมพ์แต่ละองค์ประกอบโดยไม่มีเครื่องหมายคำพูด   -  person Kevin    schedule 07.04.2014
comment
@Kevin หากฉันใช้แต่ละองค์ประกอบผ่าน for loop มันจะเข้าถึงได้โดยไม่ต้องใช้เครื่องหมายคำพูดคู่ แล้วปัญหาคืออะไรล่ะ?   -  person Madhusudan    schedule 07.04.2014
comment
คุณกำลังสร้างความสับสนให้กับรายการสตริงที่มีอักขระกับอ็อบเจ็กต์ synset จริงใน 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