我正在尋找一種本機 python 解決方案,它允許我替換出現在字串串列中的短語。基本上,這看起來像:
text_array = ['the store has a piano','dulcimer players are popular with the ladies','guitar','rock legends dont shy away from this gibson model or this PRS electric','guitar','fender guitar','PRS electric',...]
而且我的目標是找到短語(準確地)text_array并將它們替換為我在我正在呼叫的字典中繪制的字串邏輯thesaurus:
thesaurus = {'gibson model':'guitar', 'fender guitar':'guitar', 'PRS electric':'guitar'}
問題
我將如何遍歷text_array標記的短語的每個元素并替換所有出現的短語,無論它們出現在thesaurus哪里?(注意:我只想替換完全匹配并保留字串的其余部分)。
期望的輸出:
text_array = ['the store has a piano','dulcimer players are popular with the ladies','guitar','rock legends dont shy away from this guitar or this guitar', 'guitar','guitar','guitar']
uj5u.com熱心網友回復:
這將是我的方法。這個不影響原版text_array。
text_array = ['the store has a piano','dulcimer players are popular with the ladies','guitar','rock legends dont shy away from this gibson model or this PRS electric','guitar','fender guitar','PRS electric']
thesaurus = {'gibson model':'guitar', 'fender guitar':'guitar', 'PRS electric':'guitar'}
res = []
for text in text_array:
for key in thesaurus:
text = text.replace(key, thesaurus[key])
res.append(text)
print(res)
uj5u.com熱心網友回復:
您可以使用以下代碼片段來獲得預期的輸出:
text_array = ['the store has a piano','dulcimer players are popular with the ladies','guitar','rock legends dont shy away from this gibson model or this PRS electric','guitar','fender guitar','PRS electric',...]
thesaurus = {'gibson model':'guitar', 'fender guitar':'guitar', 'PRS electric':'guitar'}
for index, val in enumerate(text_array):
# Checking if key exist in list item
for key in list(thesaurus.keys()):
if key in val:
# Updating List item value
text_array[index] = text_array[index].replace(key, thesaurus[key])
uj5u.com熱心網友回復:
使用此代碼
text_array = ['the store has a piano','dulcimer players are popular with the ladies','guitar','rock legends dont shy away from this gibson model or this PRS electric','guitar','fender guitar','PRS electric']
thesaurus = {'gibson model':'guitar', 'fender guitar':'guitar', 'PRS electric':'guitar'}
for key in thesaurus.keys():
for i,item in enumerate(text_array):
text_array[i]=item.replace(key,thesaurus[key])
print(text_array)
結果 :
['the store has a piano', 'dulcimer players are popular with the ladies', 'guitar', 'rock legends dont shy away from this guitar or this guitar', 'guitar', 'guitar', 'guitar']
uj5u.com熱心網友回復:
大概只有一個匹配項,所以我們可以在內部使用生成器運算式在next“詞庫”中搜索匹配項:
如果要更改原始串列:
for i, text in enumerate(text_array):
m = next(((k,v) for k,v in thesaurus.items() if k in text), None)
if m:
text_array[i] = text.replace(m[0], m[1])
如果要創建新串列:
for i, text in enumerate(text_array):
m = next(((k,v) for k,v in thesaurus.items() if k in text), None)
if m:
text = text.replace(m[0], m[1])
out.append(text)
您還可以使用熊貓:
import pandas as pd
s = pd.Series(text_array)
msk = s.str.contains('|'.join(thesaurus))
s[msk] = s[msk].replace(thesaurus, regex=True)
out = s.tolist()
輸出:
['the store has a piano',
'dulcimer players are popular with the ladies',
'guitar',
'rock legends dont shy away from this guitar',
'guitar',
'guitar',
'guitar']
uj5u.com熱心網友回復:
這是我的:
text_array = ['the store has a piano','dulcimer players are popular with the ladies','guitar','rock legends dont shy away from this gibson model or this PRS electric','guitar','fender guitar','PRS electric',]
thesaurus = {'gibson model':'guitar', 'fender guitar':'guitar', 'PRS electric':'guitar'}
for i in range(len(text_array)):
for x,y in thesaurus.items():
text_array[i] = text_array[i].replace(x,y)
print(text_array)
輸出:
['the store has a piano', 'dulcimer players are popular with the ladies', 'guitar', 'rock legends dont shy away from this guitar or this guitar', 'guitar', 'guitar', 'guitar']
uj5u.com熱心網友回復:
使用正則運算式:
import re
text_array = [
'the store has a piano',
'dulcimer players are popular with the ladies',
'guitar',
'rock legends dont shy away from this gibson model or this PRS electric',
'guitar',
'fender guitar',
'PRS electric'
]
thesaurus = {
'gibson model':'guitar',
'fender guitar':'guitar',
'PRS electric':'guitar'
}
pattern = re.compile(r'(?<!\w)(' '|'.join(re.escape(key) for key in thesaurus.keys()) r')(?!\w)')
for i,sentence in enumerate(text_array):
text_array[i] = pattern.sub(lambda x: thesaurus[x.group()], sentence)
print(text_array)
輸出:
['the store has a piano', 'dulcimer players are popular with the ladies', 'guitar', 'rock legends dont shy away from this guitar or this guitar', 'guitar', 'guitar', 'guitar']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/421916.html
標籤:
