基於排列組合方式進行有序交集提取
需求:我想要從兩個字元串中提取交集的詞,詞的順序必須一致,可以不是連續的詞。
tag=百白破疫苗
title=疫苗吸附無細胞百白破聯合例如上述的交集為 百白破
下面是python代碼:
#####代碼說明#####
本代碼作用是獲取兩個list的交集,從而來獲取一個tag在title中命中順序對的詞的字數佔tag總字數的比例
這裡求取交集是通過排列組合來求取例如求取a=[1,2,3,6]和b=[1,3,6]的交集為[1,3,6]求取方法為首先對a進行全排列 排列方式為1,2,3,6,12,13,16,123,126,136,1236,23,26,236,36也就是將所有順序一直的組合全部找出來
然後b進行全排列1,3,6,13,16,136,36所以二者交集為b中所有元素,然後取長度最大的交集為結果136,所以二者交集為[1,3,6]如果有多個長度一樣的最大的交集,那就將該交集對應的詞的字數計算出來,取字數
最大的詞,如果字數都一樣,那就取一個詞即可。def all_combine(list1):# 獲取tag和title的全排列 combin_result = [] for i in range(1, len(list1) + 1): iter = itertools.combinations(list1, i) combin_result.append(list(iter)) return combin_resulttag=百白破疫苗title=疫苗吸附無細胞百白破聯合tag_list=jieba.lcut(tag)title_list=jieba.lcut(title)tag_index = []for itme in enumerate(tag_list): tag_index.append(itme[0]) # 取出tag命中標題中的部分字的索引值tag_hit_index = []for word in title_list: for item in enumerate(tag_list): if item[1]==word: tag_hit_index.append(item[0])list1 =tag_indexlist2 = tag_hit_indexlist1_tuple=all_combine(list1)list2_tuple=all_combine(list2)list1_list=[]list2_list=[]for i in list1_tuple: for j in i: list1_list.append(j)for i in list2_tuple: for j in i: list2_list.append(j)print(list1_list)print(list2_list)jiaoji=[]for i in list1_list: for j in list2_list: if i==j: jiaoji.append(j)print(jiaoji)list_lenth=[]for i in jiaoji: list_lenth.append(len(i))maxlen=max(list_lenth)print(maxlen)allword=[]jiaoji_loc=[]for i in jiaoji: word = [] if len(i)==maxlen: jiaoji_loc.append(i) for item in enumerate(tag_list): for j in i: if j==item[0]: word.append(item[1]) print(.join(word)) allword.append(.join(word))print(allword)allword_len=[]for word in allword: allword_len.append(len(word))max_len=max(allword_len)for word in allword: if len(word)==max_len: print(word) break
推薦閱讀:
※Python對象生成
※vim逐行調試python
※Python讀取新浪財經股票財務數據生成Excel電子表格
※Live 審核通過啦,收集聽眾姥爺的問題
※手把手教你用Python進行回歸(附代碼、學習資料)