微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python从列表中提取内容

如何解决Python从列表中提取内容

我正在使用pyLDAvis在Python中整理一个文本分析脚本,并且正在尝试将其中一个输出清理为更简洁易读的内容。返回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提取双引号之间的文本,并对提取的值使用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

from tkinter import *

class BoxFrame (LabelFrame):
    def __init__(self,master = None,bd = 4,relief = GROOVE,labelanchor = 'n',font = 'Arial 10 bold',fg = 'navy blue',*args,**kwargs):
        LabelFrame.__init__(self,master,**kwargs)


class ViewButtons (Button):
    def __init__(self,text = 'View Result',font = ('',9,'bold'),bg = 'Pale Green',**kwargs):
        Button.__init__(self,**kwargs)
        self.pack(pady = 20)

### Main Program ###
root = Tk()

box = BoxFrame(root,width = 100,height = 50)
box.pack_propagate(0)
box.pack()

button = ViewButtons(box)

mainloop()
,

假设输出与您的示例一致,则应该很简单。该列表包含2个元组,其中第二个是在python中具有大量可用操作的字符串。

str.split("+")将返回从str沿'+'字符分割的列表。

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

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

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

然后您使用.group()进行匹配,如下所示:

score.group()

word.group()

这次您也可以简单地再次沿'*'使用split来拆分两个部分。 返回的列表应排序。

l = str.split('*')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。