IR:如何根据索引值和 return 文档匹配文档?

IR: How do you match documents based on index values and return the document?

我有一个 pandas 数据框 df,它包含语料库中根据 BM25 分数排名的前 10 篇文档,并按 Doc_ID 索引。

Doc_ID Rank BM25 Score
1234 1 3.3472
5678 2 3.3238

我还有一个列表 documents,其中包含所有与其 Doc_ID 配对的文档,因此该列表的格式如下:[['First Doc_ID', 'First doc text], ['Second Doc_ID', 'Second doc text], ...].

我需要对 df 中排名前 3 的文档取 Doc_ID,并将每个文档与 documents 中相应的 Doc_ID 进行匹配并打印出文档文本。我知道如何通过 df.index[df['Rank'] == 1][0]df 获得特定排名的 Doc_ID,但我不确定如何从那里获得相应的文档文本。

您可以将列表转换为 DataFrame 并且 merge:

documents = [[1234, 'First doc text'],
             [5678, 'Second doc text'],
             [5679, 'Third doc text'],
             [5680, 'Fourth doc text']]

(df[df['Rank'].le(3)]
 .merge(pd.DataFrame(documents,
                     columns=['Doc_ID', 'Text']),
        on='Doc_ID')
)

输出:

   Doc_ID  Rank  BM25 Score             Text
0    1234     1      3.3472   First doc text
1    5678     2      3.3238  Second doc text
2    5679     3      3.2000   Third doc text

使用的输入:

   Doc_ID  Rank  BM25 Score
0    1234     1      3.3472
1    5678     2      3.3238
2    5679     3      3.2000
3    5680     4      3.1000

或者,如果您想要使用 python 的列表:

top3 = set(df.loc[df['Rank'].le(3), 'Doc_ID'])
out = [text for ID, text in documents if ID in top3]

输出:['First doc text', 'Second doc text', 'Third doc text']