Python 从列表中提取内容

Python extracting contents from list

我正在使用 pyLDAvis 在 Python 中组合一个文本分析脚本,并且我正在尝试将其中一个输出清理成更清晰、更易于阅读的内容。 return 4 个主题的前 5 个重要单词的函数是一个列表,如下所示:

    [(0, '0.008*"de" + 0.007*"sas" + 0.004*"la" + 0.003*"et" + 0.003*"see"'),

     (1,
      '0.009*"sas" + 0.004*"de" + 0.003*"les" + 0.003*"recovery" + 0.003*"data"'),

     (2,
      '0.007*"sas" + 0.006*"data" + 0.005*"de" + 0.004*"recovery" + 0.004*"raid"'),

     (3,
      '0.019*"sas" + 0.009*"expensive" + 0.008*"disgustingly" + 0.008*"cool." + 0.008*"houses"')]

理想情况下,我想把它变成一个数据框,其中第一行包含每个主题的第一个单词,以及相应的分数,列代表单词及其分数,即:

r1col1 是 'de',r1col2 是 0.008,r1col3 是 'sas',r1col4 是 0.009,等等

有没有办法提取列表的内容并根据列表的格式分隔值?

这是一个解决方案,使用正则表达式 "(.*?)" 来提取双引号之间的文本,并对提取的值使用 enumerate 以获得预期结果,并在定界符 [=15= 上使用 join ].

import re

for k, v in values:
    print(
        ", ".join([f"r{k + 1}col{i + 1} is {j}"
                   for i, j in enumerate(re.findall(r'"(.*?)"', v))])
    )

r1col1 is de, r1col2 is sas, r1col3 is la, r1col4 is et, r1col5 is see
r2col1 is sas, r2col2 is de, r2col3 is les, r2col4 is recovery, r2col5 is data
r3col1 is sas, r3col2 is data, r3col3 is de, r3col4 is recovery, r3col5 is raid
r4col1 is sas, r4col2 is expensive, r4col3 is disgustingly, r4col4 is cool., r4col5 is houses

假设输出与您的示例一致,它应该相当简单。该列表包含 2 个元组,其中第二个是在 python.

中具有大量可用操作的字符串

str.split("+") 将 return 列表从 str 沿 '+' 字符拆分。

然后要提取单词和分数,您可以使用 python 包 're' 来匹配正则表达式。

score = re.search('\d+.?\d*', str)

word = re.search('".*"', str)

然后你使用 .group() 来获得匹配:

score.group()

word.group()

这次您也可以简单地沿着“*”再次使用拆分来拆分两部分。 returned 列表应该排序。

l = str.split('*')