天天看點

18.9.7阿裡2019算法校招機試題--NLP

# 輸入範例:
# singer_周傑|周傑倫|劉德華|王力宏;song_冰雨|北京歡迎你|七裡香;actor_周傑倫|孫俪
# 請播放周傑倫的七裡香給我聽
# 輸出範例:
# 請播放 周傑倫/actor,singer 的 七裡香/song 給我聽
import sys
def merge(str,key,t,i): #合并字元串,key是目前搜尋到的字元串#先考慮主串中關鍵詞隻出現一次
    str=str.split(key)
    ind=
    if str[][]!='/':    #當隻出現一個标簽
        new_key=key+'/'+t[i]
        return ' '.join([str[],new_key,str[]])
    else:  #是'/'時
        for j in range(len(str[])):#找已有标簽的空格
            if str[][j]==' ':
                ind=j
                break
        #如果在尾部還沒考慮
        new_key=key+str[][:ind]+','+t[i]+str[][ind:]
        return ' '.join([str[],new_key])



str1='singer_周傑|周傑倫|劉德華|王力宏;song_冰雨|北京歡迎你|七裡香;actor_周傑倫|孫俪'
str2='請播放周傑倫的七裡香給我聽'
str1_list=str1.split(';')

t=[]
for i in range(len(str1_list)):
    tmp=str1_list[i].split('_')
    t.append(tmp[])
    tmpp=tmp[].split('|')
    t.append(tmpp)

#找最長比對

key=[]
for i in range(,int(len(t)/)):
    i=i*
    longest = -
    ind = 
    for eme in t[i+]:
        if eme in str2:  #若找到,則計算其長度是否最長
            if len(eme)>longest:
                longest=len(eme)
                ind=t[i+].index(eme)
    key.append(ind)

#字元合并
for i in range(,int(len(t)/)):
    str2=merge(str2, t[i*+][key[i]], t, i*)  #i*2+1是t的人物表索引,i*2是表頭索引

#去除連續空格
re=' '.join(str2.split())
print(re)
           

繼續閱讀