返回顶部
首页 > 资讯 > 后端开发 > Python >实用python+phpcmsv9
  • 592
分享到

实用python+phpcmsv9

python 2023-01-31 01:01:06 592人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

转自臭脚丫丫博客,觉得有用,博主貌似关博客了,可惜。最近写了个根据结巴分词后的结果,两两对比分词后的集合,根据雅比克距离 = 集合的交集 / 集合的并集,计算出距离最大的前10个结果,并考虑到同义词。最后每日计算,存入数据库,用程序调用。#

转自臭脚丫丫博客,觉得有用,博主貌似关博客了,可惜。


最近写了个根据结巴分词后的结果,两两对比分词后的集合,根据雅比克距离 = 集合的交集 / 集合的并集,计算出距离最大的前10个结果,并考虑到同义词。最后每日计算,存入数据库,用程序调用。


#最近写了个根据结巴分词后的结果,两两对比分词后的集合,根据雅比克距离 = 集合的交集 / 集合的并集,计算出距离最大的前10个结果,并考虑到同义词。最后每日计算,存入数据库,用程序调用。
# coding=utf-8
import sys
reload(sys)
import Mysqldb
sys.setdefaultencoding('utf-8')
sys.path.append('../')
import jieba
jieba.initialize()
jieba.load_userdict("userdict.txt")
import jieba.analyse
import re
import operator
import string
f_ex = open('Words.txt','rb')  #排除词
f_out = open('output.txt','wb')
words = [line.strip() for line in f_ex.readlines()]  #python独特的列表解析
conn = mysqldb.connect(host="localhost",user="root",passwd="",db="root",charset="utf8")
cursor = conn.cursor()
cursor.execute("select a.id,a.title,a.description from v9_ask_a a limit 10")
data = cursor.fetchall()   #取所有结果
for x in data:
    f_out.write(str(x[0]).decode("utf-8")+'\t'+str(x[1]).decode("utf-8")+'\t')
    title = str(x[1]).decode("utf-8")
    tags_title = jieba.analyse.extract_tags(title, topK=10)
    for title_ex in tags_title:
        for title_word in words:
            if title_word.decode('gbk') == title_ex:
                title_ex = ''
        if title_ex != '':
            f_out.write(title_ex+'|')
    f_out.write('\r\n')
f_ex.close()
f_out.close()
cursor.execute("select * from v9_similar")  #从数据库里取相似词集合
similar = cursor.fetchall()
newdata = {}
for similardata in similar:
    wordslist = similardata[1].decode("utf-8").split(',')
    for wordx in wordslist:
        newdata.setdefault(similardata[0],[]).append(wordx)  #字典的一键多值,用列表作为字典的值
f_out = file('output.txt','rb')
result = f_out.readlines()
list1 = []
list2 = []
for x in result:
    relate_table = x.split('\t')
    list1.append(relate_table[0])
    list2.append(relate_table[2])
list3 = dict(zip(list1,list2))    #组合2个列表为字典
dic = {}
for x in list3:
    similarnum1 = []
    list3x = list3[x].decode("utf-8")
    new1 = list3x.split('|')
    for new1x in new1:
        for b in newdata:
            for c in newdata[b]:
                if c.decode("utf-8") == new1x:
                    similarnum1.append(b)  #将相似词的id写入到列表1
    for y in list3:
        similarnum2 = []
        if list3[x] != list3[y]:
            list3y = list3[y].decode("utf-8")
            new2 = list3y.split('|')
            for new2x in new2:
                for e in newdata:
                    for f in newdata[e]:
                        if f.decode("utf-8") == new2x:
                            similarnum2.append(e)  #将相似词的id写入到列表2
            jiao = len(list(set(new1)&set(new2)))   #取2个集合的交集
            bing = len(list(set(new1)|set(new2)))   #取2个集合的并集
            simlen = len(list(set(similarnum1)&set(similarnum2)))  #取对比两个集合在相似词集合的交集
            jiao+=simlen
            bing-=simlen
            result = float(jiao)/float(bing)   #计算结果要先进行转换
            dic.setdefault(x, { })[y] = result  #字典的一键多值,用子字典作为字典的值
dic2 = {}
for x in dic:
    dic1 = dic[x]
    sorted_x = sorted(dic1.iteritems(), key=lambda dic1 : dic1[1], reverse=True)    #将字典的键值进行降序排列
    sorted_x = sorted_x[0:10]   #取最大的10个键值
    for y in sorted_x:
        y = str(y)
        z = y.split("'")[1]
        dic2.setdefault(x, []).append(z)
for x in dic2:
    y = ",".join(dic2[x])   #将子字典转换成字符串插入数据库
    x = string.atoi(x)  #将字符串转换成整数
    value = [y,x]
    cursor.execute('update v9_ask_a set relate_id=%s where id=%s',value)
    conn.commit()
cursor.close()
conn.close()


觉得很实用,先留下来。。


1、PHPcms设置
先在扩展里面添加一下工作流,然后设置栏目发布需要审核就行


2、Python计算相关性
计算相关性的方法可以用tf-idf与余弦相似性:Http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
我暂时用的是雅比克距离 = 集合的交集 / 集合的并集(英文名叫啥不清楚了),并且考虑到同义词。
先将文章进行分词,用结巴分词自带的tf-idf提取最重要的10个分词,然后再一一对比进行计算。
雅比克距离计算没啥好说的,我来说下计算的时候怎么考虑到同义词。

(1)在数据库里面新建表v9_similar,然后有2个字段:id,words,words存储的是同义词,用逗号隔开。

(2)将id和words存在字典里面,一键多值


cursor.execute("select * from v9_similar")
similar = cursor.fetchall()
newdata = {}     //newdata字典用于存储近义词
for similardata in similar:
    wordslist =similardata[1].decode("utf-8").split(',')
    for wordx in wordslist:
        newdata.setdefault(similardata[0],[]).append(wordx)


(3)将文章的前10个分词和同义词进行对比,如果有在同义词里面出现,那么记录下改同义词的id

for x in list3:  //将要计算的所有文章分词后组成列表,用"|"分割
    similarnum1 = []
    list3x = list3[x].decode("utf-8")
    new1 = list3x.split('|')
    for new1x in new1:
        for b in newdata:
            for c in newdata:
                if c.decode("utf-8") == new1x:
                    similarnum1.append(b) //如果有同义词,那么将id存储到列表里

这样,每篇文章与同义词进行对比的时候,就可以形成每篇文章的相似id列表。然后再将每篇文章的相似词列表进行取交集,就可以计算出2篇文章有多少分词是相似的。

jiao = len(list(set(new1)&set(new2)))
bing = len(list(set(new1)|set(new2)))
simlen = len(list(set(similarnum1)&set(similarnum2)))
//simlen就是将两篇文章进行相似ID列表取交集
jiao+=simlen      //取交集的时候加上simlen
bing-=simlen      //取并集的时候减去simlen
result = float(jiao)/float(bing)

(4)计算完结果后再将相似文章的id存入数据库表,用逗号隔开

    value = [y,x]
    cursor.execute('update v9_news set relate=%s where id=%s',value)


3、phpcms模板调用计算好的相似文章id

{pc:get sql="select * from v9_news where (id=$id and status=99)"}
  {loop $data $uu}
    {if $uu[relate] != ''} //判断是否为空,如果是相关性没有计算好,导致这个字段为空值,就会出错
      {php $URLid=explode(',',$uu[relate]);}     //将相似文章id用逗号分隔,取ID
         {loop $URLid $ab}
            {pc:get sql="select * from v9_news where id=$ab"}
               {loop $data $bc}
                  <a href="{$bc[url]}" target="_blank">{$bc[title]}</a>
               {/loop}
           {/pc}
       {/loop}
    {/if}
  {/loop}
{/pc}


4、python随机取一个审核状态的文章,将status字段设置为99(审核状态为1),就可以发布了。

如果是生成的静态html文章,那么还需要要再一步,那就是批量生成已经审核,但是没有生成静态页面的文章。

需要修改phpcms/modules/content/目录下的create_html.php

和phpcms/modules/content/class/下的url.class.php,html.class.php

然后再根据mvc框架,传参就行,类似:

http://www.baidu.com/index.php?m=content&c=create_html&a=showzd&dosubmit=1&s=1&modelid=27&siteid=10&str=1093


5、最后一步就是将python定时更新脚本挂在linux服务器上了,需要生成静态页面定时访问那个url就行了。



--结束END--

本文标题: 实用python+phpcmsv9

本文链接: https://lsjlt.com/news/183578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 实用python+phpcmsv9
    转自臭脚丫丫博客,觉得有用,博主貌似关博客了,可惜。最近写了个根据结巴分词后的结果,两两对比分词后的集合,根据雅比克距离 = 集合的交集 / 集合的并集,计算出距离最大的前10个结果,并考虑到同义词。最后每日计算,存入数据库,用程序调用。#...
    99+
    2023-01-31
    python
  • PHPCMSV9父栏目调用子栏目的方法
    我们在做模板时有时候需要用到调用栏目的子栏目,下面这个文章将教大家实现目的,挺简单的。代码如下: 在二级栏目列表页调用:复制代码代码如下:<!--* 获取子栏目* @param $parentid 父级id* @p...
    99+
    2022-06-12
    PHPCMS V9 父栏目调用子栏目
  • [转]python---用Python实
    原文地址http://blog.sina.com.cn/s/blog_53b4587401017749.html 2009-07-21 18:02 from: http://hi.baidu.com/sinomazing/bl...
    99+
    2023-01-31
    python Python
  • [Python]用python实现批量/
      针对前面的代码 http://lxsym.blog.51cto.com/1364623/1065854,还存在的问题进行了改善:     1、去掉明文密码,通过交互输入密码     2、通过传参执行相关命令,增加灵活...
    99+
    2023-01-31
    批量 Python python
  • 用python实现Minecraft
    你有没有想过用python制作一个Minecraft在github上就有这样一个python程序(链接:https://github.com/zifan-wang/Minecraft.git),玩起来还像模像样的: 一.游戏截图 ...
    99+
    2023-09-18
    python 开发语言 Powered by 金山文档
  • 用 Python 实现 OPCUA
    用 Python 实现 OPCUA 简介 OPCUA(基于开放平台通信联盟,Open Platform Communications Unified Architecture)是一种用于工业自动化系统...
    99+
    2023-09-04
    python 网络协议
  • 用python实现ping
    这里使用的是最简易的方式,使用python的子进程管理模块,调用系统的ping命令,代码如下:import subprocess    import rep = subprocess.Popen(["ping.exe", 'google.c...
    99+
    2023-01-31
    python ping
  • python 实用脚本
    1.用python实现一个查看某网段所有主机的状态(3秒实现)#vim ping.pyimport subprocessimport threadingdef ping(host):    result = subprocess.call(...
    99+
    2023-01-31
    脚本 python
  • 用 Python 实现 LDA
    原文出处:Jordan Barber LDA 是什么LDA 演练 需要用到的包导入文档清洗文档  分词移除停用词词干提取创建 document-term matrix应用 LDA 模型检查结果LDA 原理完整代码 隐含狄利克雷分布...
    99+
    2023-01-31
    Python LDA
  • Python-master,实用Python脚本合集!
    Python这门语言很适合用来写些实用的小脚本,跑个自动化、爬虫、算法什么的,非常方便。这也是很多人学习Python的乐趣所在,可能只需要花个礼拜入门语法,就能用第三方库去解决实际问题。我在Github上就看到过不少Python代码的项目,...
    99+
    2023-05-14
    代码 Python 脚本
  • Python基础 用Python实现时钟
    语言:Python IDE:Python.IDE编写时钟程序,要求根据时间动态更新 代码思路 需求:5个Turtle对象, 1个绘制外表盘+3个模拟表上针+1个输出文字 Step1:建立Turtle对象并初始化 Step2:静态表盘绘制...
    99+
    2023-01-31
    时钟 基础 Python
  • 用Python实现Zabbix-API
        做运维的朋友应该知道,公司IDC机房经常有上架、下架、报修和报废的服务器。如果服务器数量很多的时候很容易造成监控遗漏。       大的互联网公司把监控系统和CMDB(资产管理系统|配置管理数据库系统)集成在一起,当上架一台新机...
    99+
    2023-01-30
    Python Zabbix API
  • 利用virtualenv实现Python
    由于开发需求,需要Python2和Python3共存,利用当下最流行的虚拟环境工具virtualenv实现。#安装virtualenv pip install virtualenv #使用virtualenv创建虚拟环境 virtualen...
    99+
    2023-01-31
    virtualenv Python
  • 使用 python 实现 Voronoi
    以下程序 使用python实现 Voronoi图from PIL import Image import random import math def generate_voronoi_diagram(width, height, n...
    99+
    2023-01-31
    python Voronoi
  • python groupby用法实战
    背景 已知某航空公司拥有的飞机数量如下图示,现要求在EXCEL表中,计算出各个机型每种座位布局的飞机数量在该种机型飞机总量中所占的比重。 代码实现 #导入原始数据表 import pandas as pd dt=pd.read...
    99+
    2023-01-31
    实战 python groupby
  • python 使用ldap实例
    #coding: utf-8 ldap_config = { 'ldap_path': 'ldap://xx.xx.xx.xx:389', 'base_dn': 'ou=users,dc=ledo,dc=com', 'lda...
    99+
    2023-01-31
    实例 python ldap
  • 用Python实现modbus slav
    最近在研究modbus master和modbus slave。项目要求实现modbus slave虚拟机来做功能测试。 网上modbus master相关的demo很多,但是modbus slave相关的demo很少。还是Google给...
    99+
    2023-01-31
    Python modbus slav
  • 用python实现调用jar包
    本文作者:botoo背景:python3.6 32位 + jre 32位 + windows64位首先环境搭建:安装jpype,安装的时候输入 pip install jpype1 (后面要加一个1)*一定要注意 jre和python的位数...
    99+
    2023-01-31
    python jar
  • 用python实现五子棋实例
    本文实例为大家分享了用python实现五子棋的具体代码,供大家参考,具体内容如下 # 制作一个棋盘 """ ++++++++++ ++++++++++ ++++++++++ ++++...
    99+
    2024-04-02
  • python分数实例用法
    1、说明 分数实现了一个合理的对象。清楚地保留了一个分子和一个分母,从而避免了浮点数学的一些不准确性和局限性。 一旦创建分数,它可以像往常一样用于数学表达式。 2、实例 >...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作