python - AttributeError : 'list' object has no attribute 'isdigit' . 有效指定句子列表中每个单词的 POS?

标签 python python-3.x list nltk pos-tagger

假设我有句子列表列表(在一个大型语料库中)作为标记化单词的集合。示例格式如下:

tokenized_raw_data的格式如下:

[['arxiv', ':', 'astro-ph/9505066', '.'], ['seds', 'page', 'on', '``', 
'globular', 'star', 'clusters', "''", 'douglas', 'scott', '``', 'independent', 
'age', 'estimates', "''", 'krysstal', '``', 'the', 'scale', 'of', 'the', 
'universe', "''", 'space', 'and', 'time', 'scaled', 'for', 'the', 'beginner',
 '.'], ['icosmos', ':', 'cosmology', 'calculator', '(', 'with', 'graph', 
'generation', ')', 'the', 'expanding', 'universe', '(', 'american', 
'institute', 'of', 'physics', ')']]

我想应用pos_tag

到目前为止我尝试过的内容如下。

import os, nltk, re
from nltk.corpus import stopwords
from unidecode import unidecode
from nltk.tokenize import word_tokenize, sent_tokenize
from nltk.tag import pos_tag


def read_data():
    global tokenized_raw_data
    with open("path//merge_text_results_pu.txt", 'r', encoding='utf-8', errors = 'replace') as f:
        raw_data = f.read()
        tokenized_raw_data = '\n'.join(nltk.line_tokenize(raw_data))
read_data()

def function1():
    tokens_sentences = sent_tokenize(tokenized_raw_data.lower())
    unfiltered_tokens = [[word for word in word_tokenize(word)] for word in tokens_sentences]
    tagged_tokens = nltk.pos_tag(unfiltered_tokens)
    nouns = [word.encode('utf-8') for word,pos in tagged_tokens
            if (pos == 'NN' or pos == 'NNP' or pos == 'NNS' or pos ==  'NNPS')]
    joined_nouns_text = (' '.join(map(bytes.decode, nouns))).strip()
    noun_tokens = [t for t in wordpunct_tokenize(joined_nouns_text)]
    stop_words = set(stopwords.words("english"))
function1()

我收到以下错误。

> AttributeError: 'list' object has no attribute 'isdigit'

请帮助如何以省时的方式克服此错误?我哪里错了?

注意:我在 Windows 10 上使用 Python 3.7。

最佳答案

试试这个-

word_list=[]
for i in range(len(unfiltered_tokens)):
    word_list.append([])
for i in range(len(unfiltered_tokens)): 
    for word in unfiltered_tokens[i]:
        if word[1:].isalpha():
            word_list[i].append(word[1:]) 

然后做

tagged_tokens=[]
for token in word_list:
    tagged_tokens.append(nltk.pos_tag(token))

您将得到您想要的结果!希望这有帮助。

关于python - AttributeError : 'list' object has no attribute 'isdigit' . 有效指定句子列表中每个单词的 POS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692117/

相关文章:

python - 如果数字介于两个值之间则返回 [Python]

python - 如何在特定时间发送消息 TelegramBot

python - 如何检查 float 字符串?

list - 当生成的数字在列表中时生成随机数 - ansible

python - 多重索引的滚动级别

Python写入数据库时​​总线报错问题

python - PIL(低)和多页 TIFFS

python - 如何在python中返回一个空列表

Java比较字符串

python - 在字符串周围打印 HTML 标签