我有一个文档列表和一个关键字列表,最后我需要一个表格来告诉哪个文档中存在哪些关键字。
到目前为止,我的代码:
d={}
for path in pathlist:
# because path is object not string
path_in_str = str(path)
file_name=ntpath.basename(path_in_str)
pdf_file = open(path_in_str, 'rb')
text =""
read_pdf = PyPDF2.PdfFileReader(pdf_file)
c = read_pdf.numPages
for i in range(c):
page = read_pdf.getPage(i)
text+=(page.extractText())
matches = re.findall(regex3, text, re.IGNORECASE)
d["string{0}".format(file_name)] = [x[1] for x in matches]
因此,字典“ d”具有作为“文档名称”的键和作为“水果名称”的值。示例如下:
请注意:一个键可以有多个值。直到这里一切都正常且正确为止。
我需要这样的最终输出:
有人可以让我知道如何转换字典。到上面的输出。
要更清楚:我不需要将dict转换为df,而需要将值转换为“是/否”表
答案 0 :(得分:2)
让我们从这里开始,在这里创建数据框pd_df:
print(pd_df)
输出:
0 1 2
Document1 apple banana orange
Document2 None orange banana
Document3 banana apple None
Document4 apple None None
现在尝试使用此方法来创建fruit_names列(与pd_df
中的列数无关)
for fruit_name in ['apple', 'orange', 'banana']:
pd_df.loc[:, fruit_name] = pd_df.apply(lambda x: 'y' if fruit_name in x.values.tolist() else 'n', axis=1)
print(df[['apple', 'orange', 'banana']])
输出:
apple orange banana
Document1 y y y
Document2 n y y
Document3 y n y
Document4 y n n
答案 1 :(得分:1)
在将其用作DataFrame的输入之前,以所需的方式创建字典。
我没有您的文件,所以我做了我自己的文件:
import pandas as pd
import collections, re
d1 = 'apple banana cutie'
d2 = 'foo bar'
d3 = 'kiwi plum cherry'
d4 = 'orange fig tomato'
docs = [d1, d2, d3, d4]
对于每个文档,确定是否有有趣的水果,请以水果为键在字典中收集该信息-(每个key:value对将成为DataFrame中的一列)。将文档名称收集在一个单独的容器中,并将其用作DataFrame的索引。字典值中各项的位置与文档名称集合中各项的位置相对应。
fruits_i_care_about = ['apple', 'kiwi', 'banana', 'plum']
pattern = '|'.join(fruits_i_care_about)
fruit_regex = re.compile(pattern)
d = collections.defaultdict(list)
doc_names = []
for n, doc in enumerate(docs):
doc_names.append('d{}'.format(n))
fruits_in_doc = set(fruit_regex.findall(doc))
print(fruits_in_doc)
for fruit in fruits_i_care_about:
d[fruit].append('y' if fruit in fruits_in_doc else 'n')
df = pd.DataFrame(d, index=doc_names)
我的解决方案中的 doc
是一个字符串,如果您一次只读取一页,那么它将类似于一页。如果可能的话,您可以考虑阅读整个pdf,因此您只需要对每个文档执行一次正则表达式搜索即可。
字典如下:
defaultdict(<class 'list'>,
{'apple': ['y', 'n', 'n', 'n'],
'banana': ['y', 'n', 'n', 'n'],
'kiwi': ['n', 'n', 'y', 'n'],
'plum': ['n', 'n', 'y', 'n']})
结果数据框:
apple kiwi banana plum
d0 y n y n
d1 n n n n
d2 n y n y
d3 n n n n
答案 2 :(得分:0)
这是熊猫的一项简单任务:
import pandas as pd
df = pd.DataFrame.from_dict(d, orient='index')