【问题标题】:Tokenizing a list of lists标记列表列表
【发布时间】:2018-07-18 13:32:50
【问题描述】:

我正在尝试对废弃推文的 csv 文件进行标记。我将 csv 文件作为列表上传

with open('recent_tweet_purex.csv', 'r') as purex:
reader_purex = csv.reader(purex)
purex_list = list(reader_purex)

现在推文在列表中

["b'I miss having someone to talk to all night..'"], ["b'Pergunte-me 
qualquer coisa'"], ["b'RT @Caracolinhos13: Tenho a 
tl cheia dessa merda de quem vos visitou nas \\xc3\\xbaltimas horas'"], 
["b'RT @B24pt: #CarlosHadADream'"], ['b\'"Tudo tem 
um fim"\''], ["b'RT @thechgama: stalkear as curtidas \\xc3\\xa9 um caminho 
sem volta'"], ["b'Como consegues fumar 3 purexs seguidas? \\xe2\\x80\\x94 
Eram 2 purex e mix...'"]

我已经导入了 nltk 以及以下软件包

 from nltk.tokenize import word_tokenize
 import string
 from nltk.corpus import stopwords
 from nltk.stem import WordNetLemmatizer
 from nltk.tokenize import sent_tokenize
 nltk.download('punkt')

我尝试过使用

 purex_words = word_tokenize(purex_words)

to to tokenize 但我不断收到错误

有什么帮助吗?

【问题讨论】:

  • 如果您告诉我们您遇到的错误将会更有帮助。
  • 你应该展平列表。
  • NameError Traceback (最近一次调用最后一次) in () ----> 1 purex_words = word.tokenize(purex_list) NameError: name 'word ' 未定义
  • @user9270834 错误说您调用的是word.tokenize 而不是word_tokenize。您有语法错误。将点 (.) 更改为下划线 (_)。
  • 哦等等,我搞砸了解释我是怎么搞砸的

标签: python csv twitter


【解决方案1】:

您将数组传递给word_tokenize 函数,它需要string or bytes-like object。如果你用字符串喂它,它会起作用。快速示例。

purex_words = [['I miss having someone to talk to all night..'], ['Pergunte-me qualquer coisa'],

['RT @Caracolinhos13: Tenho a tl cheia dessa merda de quem vos visitou nas \xc3\xbaltimas horas'], ['RT @B24pt: #CarlosHadADream'], ["Tudo tem um fim"], [“RT @thechgama:stalkear as curtidas \xc3\xa9 um caminho sem volta”],['Como consegues fumar 3 purexs seguidas? \xe2\x80\x94 Eram 2 purex e mix...']]

for sentence in purex_words:
    print(word_tokenize(sentence[0])) # this looks ugly to me

您可以在遍历句子之前展平列表。 请注意,我已将外部 [] 添加到您的列表中

flat_list = [item for sublist in purex_words for item in sublist]
for sentence in flat_list:
    print(word_tokenize(sentence))

结果看起来像这样。

['I', 'miss', 'having', 'someone', 'to', 'talk', 'to', 'all', 'night..']
['Pergunte-me', 'qualquer', 'coisa']
['RT', '@', 'Caracolinhos13', ':', 'Tenho', 'a', 'tl', 'cheia', 'dessa', 'merda', 'de', 'quem', 'vos', 'visitou', 'nas', '\\xc3\\xbaltimas', 'horas']
['RT', '@', 'B24pt', ':', '#', 'CarlosHadADream']
['Tudo', 'tem', 'um', 'fim']
['RT', '@', 'thechgama', ':', 'stalkear', 'as', 'curtidas', '\\xc3\\xa9', 'um', 'caminho', 'sem', 'volta']
['Como', 'consegues', 'fumar', '3', 'purexs', 'seguidas', '?', '\\xe2\\x80\\x94', 'Eram', '2', 'purex', 'e', 'mix', '...']

【讨论】:

  • 进步了,谢谢。推文现在都在他们自己的列表中,每个单词都被标记了我如何将所有这些标记的单词聚合到一个列表中?
  • 另外,我意识到你有一些多余的字符可能不是必需的,也许是因为你试图避免错误?我指的是多余的引号符号["b'Pergunte-me qualquer coisa'"]。前面的可以简化为['Pergunte-me qualquer coisa']。不需要"b
  • 最后一个问题是如何将这些列表组合成一个没有“b”的列表
  • 什么意思?以flat_list 为例?这是多余的,但你可以这样做 flat_list = [str(item) for sublist in purex_words for item in sublist] 。这摆脱了b。顺便说一句,您使用的是哪个 Python 版本,2 还是 3?有关更多信息,您可以查看this,但这不在原始问题的范围内 =)
  • 哦,我看到在您的具体情况下,您在引号中嵌套了引号,例如开头的 "b' 和结尾的 ' "。我确信有一个更好的方法可以做到这一点,但是一个快速的方法可以摆脱它,因为它总是相同的格式,子串你想要得到flat_list = [item[2:-1] for sublist in purex_words for item in sublist] 的部分。但它不是很优雅,我肯定会检查你获取文本的方式,存储它的方式以及你从.csv再次阅读它的方式!
猜你喜欢
  • 2020-03-31
  • 2010-12-31
  • 2013-06-19
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-31
相关资源
最近更新 更多