预期的字符串或类似字节的对象NLTK Mysql

时间:2019-03-19 05:58:30

标签: python sql nltk

您能帮我解决这个错误吗?

def get_db():
    mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="",
    database="cosmos"
    )
    mycursor = mydb.cursor()
    sql_select="SELECT article FROM crawling_sm"
    mycursor.execute(sql_select)
    data=mycursor.fetchall()
    for z in range(len(data)):
        text_sents=sent_tokenize(data[z])

def process_text(text_article):
    text_sents=text_article
    text_sents_clean = [remove_string_special_characters(s) for s in text_sents] #if s.istitle() == False]
    doc_info = get_doc(text_sents_clean)
    #freqDict_list = create_freq_dict(text_sents_clean)
    #TF_scores = computeTF(doc_info, freqDict_list)
    print(text_sents)

    get_db()

错误消息是我从数据库中选择的文章无法拆分为某些文本,我尝试使用send_tokenize,但是有些错误消息预期为字符串或类似字节的对象

错误消息:

  

文件“ C:\ Users \ HP Laptop \ Anaconda3 \ lib \ site-packages \ nltk \ tokenize \ punkt.py”,行1295,在_slices_from_text中       用于self._lang_vars.period_context_re()。finditer(text)中的匹配:

TypeError:预期的字符串或类似字节的对象

1 个答案:

答案 0 :(得分:1)

问题是

data = mycursor.fetchall()

返回一个元组的列表,即使查询返回的是单列。

因此,与其返回类似

的内容,
['a', 'b', 'c', 'd', 'e', 'f']

它返回

[('a',), ('b',), ('c',), ('d',), ('e',), ('f',)]

解决方案是将每个元组的第一个元素传递给sent_tokenize函数。

for row in data:
    text_sents = sent_tokenize(row[0])