4

このコードを実行すると、次のエラーが発生します。プログラミングは初めてで、役に立たない配列がたくさんあることを知っています。j配列として宣言したので、エラーがどこにあるのかわかりません。私は完全にアイデアがありません。

import pyodbc,nltk,array,re,itertools
cnxn = pyodbc.connect('Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=information_schema;User=root; Password=1234;Option=3;')
cursor = cnxn.cursor()
cursor.execute("use collegedatabase ;")
cursor.execute("select *  from sampledata ; ")
cnxn.commit()
s=[]
j=[]
x=[]
words = []
w = []
sfq = []
POS=[]
wnl = nltk.WordNetLemmatizer()
p = []
clean= []
l =[]
tupletolist= []
results = []
aux = []
regex = re.compile("\w+\.")
pp = []
array1=[]

f = open("C:\\Users\\vchauhan\\Desktop\\tupletolist.txt","w")
for entry in cursor:
    s.append(entry.injury_type),j.append(entry.injury_desc) 

def isAcceptableChar(character):
    return character not in "~!@#$%^&*()_+`1234567890-={}|:<>?[]\;',/."


from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
english_stops = set(stopwords.words('english'))
for i in range(0,200):
    j.append(filter(isAcceptableChar, j[i]))
    w.append([word for word in word_tokenize(j[i].lower()) if word not in english_stops])
    for j in range (0,len(w[i])):
        results = regex.search(w[i][j])
            if results:
                str.rstrip(w[i][j],'.')
for a in range(0 , 200):
    sfq.append(" ".join(w[a]))

from nltk.stem import LancasterStemmer
stemmer = LancasterStemmer()

for i in range (0,200):
    pp.append(len(w[i]))

for a in range (0,200):
    p.append(word_tokenize(sfq[a]))
    POS.append([wnl.lemmatize(t) for t in p[a]])
    x.append(nltk.pos_tag(POS[a]))
    clean.append((re.sub('()[\]{}'':/\-[(",)]','',str(x[a]))))
    cursor.execute("update sampledata SET POS = ? where SRNO = ?", (re.sub('()[\]{}'':/\-[(",)]','',str(x[a]))), a)

for i in range (0,len(array1)):
    results.append(regex.search(array1[i][0]))
    if results[i] is not None:
        aux.append(i)

f.write(str(w))

例外:

Traceback (most recent call last):
  File "C:\Users\vchauhan\Desktop\regexsolution_try.py", line 37, in <module>
  j.append(filter(isAcceptableChar, j[i]))
AttributeError: 'int' object has no attribute 'append'
4

4 に答える 4

7

j整数だけでなくリストも使用されています。整数名にのみ使用jし、リストに別の名前を付けます。

j.append(filter(isAcceptableChar, j[i]))    # j is not a list here,it is an int.
w.append([word for word in word_tokenize(j[i].lower()) if word not in english_stops])
for j in range (0,len(w[i])):               # here j is an int
于 2012-08-09T06:20:58.830 に答える
3

コードの次の部分をよく見てください。

for i in range(0,200):
    j.append(filter(isAcceptableChar, j[i]))
    w.append([word for word in word_tokenize(j[i].lower()) if word not in english_stops])
    for j in range (0,len(w[i])):

.append最初に on j(前にリストで初期化したもの) を呼び出し、次にそれを同じループ内でネストされたループ変数として使用する方法に注意してください。

このクラスのエラーを回避するには、コード内でより適切で意味のある変数名を使用してください。ループ変数またはモジュール レベルのリスト変数の名前を変更します。

于 2012-08-09T06:22:06.323 に答える
2

変数 'j' をループ内の int-counter として使用しているようです。つまり、リスト 'j' は、何かを追加できない int 'j' に置き換えられます。解決策: 変数の名前をより洗練された名前に変更します...

于 2012-08-09T06:17:23.360 に答える
1

インデントが壊れていますが、原因は次の行のようです。

for j in range (0,len(w[i])):

最初jは配列ですが、 int で非表示にしますj。エラーの原因はその後に発生ているように見えるため、発見するのは困難ですが、ループしているため、実際にはそうではありません。この整数の名前を変更してみてください。

于 2012-08-09T06:15:17.990 に答える