搜索自动翻译小技巧与Django分页技术浅析

本文介绍了如何利用Python实现搜索时的自动翻译,通过读取文件和字符串处理技术,结合enumerate函数进行单词匹配。同时,文章还探讨了Django的分页技术,利用`django.core.paginator.Paginator`类实现动态分页,确保每页显示指定数量的数据。
摘要由CSDN通过智能技术生成

搜索时翻译

这个思路受到了字符集的启发,如果我在本地定义一本字符集,里面存入某个英文单词和与之对应的中文翻译,这不就能实现翻译功能了么。

思路有了,那就来具体实现,首先最简单的定义字符集方式就是文件,需要了解python的文件读写技术;之后通过特定规则将文件中的英文与中文分两组并一一对应,这就用到了字符串切片技术(文件中读取的内容为字符串)。

def translate(key):
    #如果包含汉字则原样返回
    if(is_contains_chinese(key) == True):
        return key
    key_index = 0
    f = open('XunLu_details/doc/translate.txt','r')
    list_en = []
    list_cn = []
    #切分字符串,英文与中文,并存入不同列表中
    for row in f:
        #利用替换的方法删去换行,规范字符串
        row = row.replace('\n','')
        row_split = row.split(':')
        list_en.append(row_split[0])
        list_cn.append(row_split[1])
    for index,value in enumerate(list_en):
        if(key == value):
            key_index = index
    return list_cn[key_index]
    f.close()
#判断是否汉字
def is_contains_chinese(strs):
    for char in strs:
        if '\u4e00' <= char <= '\u9fa5':
            return True
    return False

定义了两个函数,其中第二个函数的作用是根据汉字在unique字符集中的顺序判断所传内容(key)是否为汉字。

translate函数是实现将translate.txt文件中的记录分组并查找,因为文件中我是这样定义的,

 英文与中文之间仅有一个冒号,行与行之间有一个默认的换行符,所以可以用split(':')与replace('\n','')来按照冒号切分并隐去换行,这里注意每一次对文件的循环都能读取到一整行数据(加上换行符)。

这样就可得到两组数据,且这两组数据的下标一一对应,如第一组["love","born"],第二组["爱","生"],

 再通过enumerate将所传入英文的下标找到,并返回对应中文数组中的下标,正常搜索就好啦。

搜索时可以通过len方法,根据所传关键字个数来判断(关键字用空格隔开)

    #记录切分列表中有多少数据
    keyCount = len(key)
    #调用translate函数,判断所得key是否为中文,并翻译
    for index,value in enumerate(key):
        key[index] = translate(value)
    from django.db.models import Q  #Q类实现filter中的或运算
    if(keyCount == 2):
        key_str1 = key[0]
        key_str2 = key[1]
        data = Message.objects.filter(Q(title__contains=key_str1)|Q(title__contains=key_str2))
    elif(keyCount == 3):
        key_str1 = key[0]
        key_str2 = key[1]
        key_str3 = key[2]
        data = Message.objects.filter(Q(title__contains=key_str1)|Q(title__contains=key_str2)|Q(title__contains=key_str3))
    #如果字符串超过三个只搜索第一个
    else:
        #将列表数据转换为字符串
        key_str = key[0]
        #模糊查询,并用values通过字典返回
        data = Message.objects.filter(title__contains=key_str)

 如果关键字是两个或三个,会分别执行两参或三参的或查询

 enumerate函数

必须通过两个循环变量来遍历其中的可迭代内容,前者为下标、后者为值

提取TXT文本中指定内容——pythonhttps://blog.csdn.net/weixin_44409075/article/details/88080091删除python字符串中指定的字符https://m.py.cn/faq/python/22313.html

Django分页

需要的类:django.core.paginator.Paginator(不同Django版本的位置可能会微调,根据编译器提示即可)

我使用GET方法传页码,这里需要给一个默认值才行

 然后初始化对象,并把获取到的当前页码加进去

 此时通过object_list获取到的data数据集中当前页应显示的数据,将它们分条显示即可。

注意:经测data可以直接传QuerySet类数组;Paginator第二参控制每页显示条数;GET接收到的可能是字符串,int一下最保险

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值