算法小记02--学习Python之百度语言翻译机

算法小记02--学习Python之百度语言翻译机
最近在无聊学习pyton语言,看到下面的ACM题目就试试手。
2006 年百度之星程序设计大赛初赛题目 6
百度语言翻译机
时限 1s
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。
为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
输入数据:
输入数据包含三部分
1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。
2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) .
3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符)
输出数据:
输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样)
输入样例

6
PS 门户搜索部
NLP 自然语言处理
PM 产品市场部
HR 人力资源部
PMD 产品推广部
MD 市场发展部
百度的部门包括 PS , PM , HR , PMD , MD 等等,其中 PS 还包括 NLP 小组。

输出样例

百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。

注意:
1 . 输入数据中是中英文混合的,中文采用 GBK 编码。
2 . 为保证答案的唯一性,缩率语的转换采用正向最大匹配(从左到右为正方向)的原则。请注意输入例子中 PMD 的翻译。

语言:python
代码:
*****************************
#baidu translate machine
import re
map = {}
def translate(doc):
    list = re.findall(r'[A-Z]+',doc)#find all shrinkage world
    list.sort()#sort
    l = len(list);
    for i in range(0,  l):
        if list[l - 1 - i] in map:#if shrinkage world has been record
            doc = doc.replace(list[l - 1 - i],  map[list[l - 1 - i]])#replace shrinkage world
    return doc
def isCapital(str):
    if re.match(r'^[A-Z]+$',str):
        return True
    else:
        return False
N = int(input())
error = False
if N <= 10000:
    for i in range(0, N):
        str = input()
        list = str.split()
        if len(list) != 2\
                or len(list[0]) > 10\
                or len(list[1]) > 255\
                or not isCapital(list[0]):
            print("input error")
            error = True
            break
        map[list[0]] = list[1]
if not error:
    doc = input()
    print (translate(doc))
***********************************
输入:
6
PS 门户搜索部
NLP 自然语言处理
PM 产品市场部
HR 人力资源部
PMD 产品推广部
MD 市场发展部
百度的部门包括 PS , PM , HR , PMD , MD 等等,其中 PS 还包括 NLP 小组。
************************************
输出:
百度的部门包括 门户搜索部 , 产品市场部 , 人力资源部 , 产品推广部 , 市场发展部 等等,其中 门户搜索部 还包括 自然语言处理 小组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值