按分隔符之间的关键字提取文本

问题描述 投票:0回答:2

请帮我解决清除不必要部分文本的问题。

我有一个数据集示例:

df = pd.DataFrame({'addressfrom': ['Hüseyinağa, Rexee Hotel, Büyük Bayram Sokak', 'Rixos Resort', '123 Main St, Hotel Hilton', 'Residence Rixos, 1234']})

以及以下列表:

 keywords = ['hotel', 'resort', 'hilton', 'novotel', 'rixos', 'palace', 'residence', 'radisson', 'holiday', 'apartments', 'plaza', 'inn', 'club', 'spa']

我正在尝试使用关键字提取字符串的一部分。同时,我需要消除所需部分周围的文本。我尝试使用分隔符“,”来实现此目的,在某些情况下它可能是“-”。最终我想实现如下格式。

索引 地址来自
0 雷克西酒店
1 里克索斯度假村
2 希尔顿酒店
3 里克索斯住宅酒店

我所能达到的最好成绩就是这个

`df = pd.DataFrame({'addressfrom': ['Hüseyinağa, Rexee Hotel, Büyük Bayram Sokak', 'Rixos Resort', '123 Main St, Hotel Hilton', 'Residence Rixos, 1234']})

keywords = ['hotel', 'resort', 'hilton', 'novotel', 'rixos', 'palace', 'residence', 'radisson', 'holiday', 'apartments', 'plaza', 'inn', 'club', 'spa']

pattern = f'[^,]*({"|".join(keywords)})[^,]*'

df['addressfrom'] = df['addressfrom'].str.extract(pattern, flags=re.IGNORECASE)

print(df)`

输出:

索引 地址来自
0 酒店
1 度假村
2 希尔顿
3 里克索斯
python pandas data-cleaning
2个回答
0
投票

试试这个:

df['words_from_list'] = df['addressfrom'].str.lower().str.extract('('+'|'.join(keywords)+')',expand=False)

请注意,如果列表中出现两个单词 - 它将采用第一个


0
投票

实现此目的的一种方法是使用逗号作为分隔符来分割地址字符串,然后将正则表达式模式应用于每个部分。然后提取匹配的部分并将它们重新连接成一个字符串。比如:

def extract_keywords(s, keywords):
    pattern = f'[^,]*\\b({"|".join(keywords)})\\b[^,]*'
    match = re.search(pattern, s, flags=re.IGNORECASE)
    return match.group(0) if match else None

df['addressfrom'] = df['addressfrom'].apply(lambda x: extract_keywords(x, keywords))

代码演示

© www.soinside.com 2019 - 2024. All rights reserved.