Почему я получаю сообщение «AttributeError: объект str» не имеет атрибута «append» в Python? - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь сгенерировать модель скрытого распределения Дирихле, используя 500 различных текстов. Одна часть моего кода выглядит следующим образом:

from gensim.models import Phrases
from gensim import corpora, models

bigram = Phrases(docs, min_count=10)
trigram = Phrases(bigram[docs])
for idx in range(len(docs)):
    for token in bigram[docs[idx]]:
        if '_' in token:
            # Token is a bigram, add to document.
            docs[idx].append(token)
    for token in trigram[docs[idx]]:
        if '_' in token:
            # Token is a bigram, add to document.
            docs[idx].append(token)

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

File ".../scriptLDA.py", line 74, in <module>
    docs[idx].append(token)
AttributeError: 'str' object has no attribute 'append'

Может кто-нибудь исправить это для меня? Спасибо!

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

append () используется для добавления элементов в массив, а не для соединения строк. https://docs.python.org/3/tutorial/datastructures.html Вы можете сделать:

a = "string1" a = a + "string2"

или:

a = [1,2,3,4] a.append(5)

0 голосов
/ 01 апреля 2020

Добро пожаловать в Stackoverflow.

Python сообщает вам, что документы [idx] - это не список, а строка. Поэтому он не имеет метода append () для вызова.

>>> fred = "blah blah"
>>> fred.append("Bob")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'
>>> elsie = [1,2,3,4]
>>> elsie.append(5)
>>> elsie
[1, 2, 3, 4, 5]
>>> type(fred)
<class 'str'>
>>> type(elsie)
<class 'list'>
>>> 

Если все, что вы хотите сделать, это добавить строку токена в строку docs [idx], тогда используйте «+»:

>>> ginger = fred + "Another string"
>>> ginger
'blah blahAnother string'

Если это сложнее, то это другое дело.

...