私は単語リストと私は複製する必要があるいくつかの文章があります。単語リストに基づいて単語を置き換えることによって、文章を複製する最速の方法は何ですか?
wordlist_dict = {
'class1': ['word_a', 'word_b', 'word_c'],
'class2': ['word_d', 'word_e'],
'class3': ['word_f', 'word_g', 'word_h', 'word_i', 'word_a']
}
sent_list = [
"I have a sentence with word_g",
"And another sentence with word_d",
"Don't forget word_b",
"no keyword here",
"Last sentence with word_c and word_e"
]
私の予想される結果は次のとおりです。
I have a sentence with word_f
I have a sentence with word_h
I have a sentence with word_i
I have a sentence with word_a
And another sentence with word_e
Don't forget word_a
Don't forget word_c
Last sentence with word_a and word_d
Last sentence with word_a and word_e
Last sentence with word_b and word_d
Last sentence with word_b and word_e
Last sentence with word_c and word_d
ここでは私の方法である:
import re
pattern_list = []
pattern_all = ''
wordlist = sorted(wordlist_dict.values())
for v in wordlist:
pattern_list.append('({})+'.format('|'.join(v)))
pattern_all += '|' + '|'.join(v)
pattern_all = '({})+'.format(pattern_all[1:])
print(pattern_list)
# ['(word_a|word_b|word_c)+', '(word_d|word_e)+', '(word_f|word_g|word_h|word_i)+']
print(pattern_all)
# (word_a|word_b|word_c|word_d|word_e|word_f|word_g|word_h|word_i)+
new_sent_list = []
for sent in sent_list:
match_list = re.findall(pattern_all, sent)
print(match_list)
if match_list:
for match in match_list:
for i in range(len(pattern_list)):
if re.search(pattern_list[i], sent):
if match in wordlist[i]:
match_wordlist = wordlist[i]
match_wordlist.remove(match)
for word in match_wordlist:
new_sent_list.append(sent.replace(match, word))
else:
continue
そして、私はかしら単語リストと文リストが例よりはるかに大きいので、これを行うには効率的です。前もって感謝します。
更新:複数のクラスに属する単語と2つ以上のキーワードを持つ文があることを認識したので、私のコードは今は動作しません。
コードが正常に機能している場合は、[codereview.se]に問い合わせてください。前もって感謝します。 – usr2564301