gpt4 book ai didi

python - 根据列表中的多个单词从 pandas 数据框中提取所有短语

转载 作者:行者123 更新时间:2023-12-05 01:03:35 24 4
gpt4 key购买 nike

我有一个 list ,L:

L = ['top', 'left', 'behind', 'before', 'right', 'after', 'hand', 'side']

我有一个 Pandas 数据框,DF:

<头>
文字
对象在人之前和之后
物体在人的背后
右边的对象紧挨着人的左上角

我想以这种方式从 DF 列“文本”中提取 L 中的所有单词:

<头>
文字 Extracted_Value
对象在人之前和之后 之前_之后
物体在人的背后 后面
右边的对象紧挨着人的左上角 right_top 左侧

对于案例 1 和 2,我的代码正在运行:

L = ['top', 'left', 'behind', 'before', 'right', 'after', 'hand', 'side']
pattern = r"(?:^|\s+)(" + "|".join(L) + r")(?:\s+|$)"
df["Extracted_Value "] = (
df['Text'].str.findall(pattern).str.join("_").replace({"": None})
)

对于案例 3,我得到 right_top_hand

与第三个示例一样,如果识别出的单词是连续的,则将它们作为一个短语(一次提取)来提取。所以在右边的对象是人的左上角旁边,有两个提取 - 右边和左上角。因此,只有这两个提取由 _ 分隔。

我不知道如何让它工作!

最佳答案

试试:

df["Extracted_Value"] = (
df.Text.apply(
lambda x: "|".join(w if w in L else "" for w in x.split()).strip("|")
)
.replace(r"\|{2,}", "_", regex=True)
.str.replace("|", " ", regex=False)
)
print(df)

打印:

                                                          Text           Extracted_Value
0 the objects are both before and after the person before_after
1 the object is behind the person behind
2 the object in right is next to top left hand side of person right_top left hand side

编辑:改编@Wiktor 对 Pandas 的回答:

pattern = fr"\b((?:{'|'.join(L)})(?:\s+(?:{'|'.join(L)}))*)\b"

df["Extracted_Value"] = (
df["Text"].str.extractall(pattern).groupby(level=0).agg("_".join)
)
print(df)

关于python - 根据列表中的多个单词从 pandas 数据框中提取所有短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74020472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com