请帮我解决清除不必要部分文本的问题。
我有一个数据集示例:
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 | 里克索斯 |
试试这个:
df['words_from_list'] = df['addressfrom'].str.lower().str.extract('('+'|'.join(keywords)+')',expand=False)
请注意,如果列表中出现两个单词 - 它将采用第一个
实现此目的的一种方法是使用逗号作为分隔符来分割地址字符串,然后将正则表达式模式应用于每个部分。然后提取匹配的部分并将它们重新连接成一个字符串。比如:
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))