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']
我有一个 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']