18.9.7阿里2019算法校招机试题--NLP

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuwenyuanxi/article/details/82503750
# 输入范例:
# singer_周杰|周杰伦|刘德华|王力宏;song_冰雨|北京欢迎你|七里香;actor_周杰伦|孙俪
# 请播放周杰伦的七里香给我听
# 输出范例:
# 请播放 周杰伦/actor,singer 的 七里香/song 给我听
import sys
def merge(str,key,t,i): #合并字符串,key是当前搜索到的字符串#先考虑主串中关键词只出现一次
    str=str.split(key)
    ind=0
    if str[1][0]!='/':    #当只出现一个标签
        new_key=key+'/'+t[i]
        return ' '.join([str[0],new_key,str[1]])
    else:  #是'/'时
        for j in range(len(str[1])):#找已有标签的空格
            if str[1][j]==' ':
                ind=j
                break
        #如果在尾部还没考虑
        new_key=key+str[1][0:ind]+','+t[i]+str[1][ind:]
        return ' '.join([str[0],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[0])
    tmpp=tmp[1].split('|')
    t.append(tmpp)

#找最长匹配

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

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

#去除连续空格
re=' '.join(str2.split())
print(re)
展开阅读全文

没有更多推荐了,返回首页