Python之由公司名推算出公司官网(余弦相似度)

2023-11-06

读大学时期写的博文

1.问题

对展会数据分类后,我的新任务是如何通过 公司名、公司地址、国家等海关数据推断出该公司的官网网站(若官网不存在则不考虑) 以下数据仅供参考:

公司名 国家 地址
JPW INDUSTRIES INC
427 NEW SANFORD RD LAVERGNE TN 37086 US
Fujian Xishi Co., Ltd CN, CHINA
BusinessPartner Co.,ltd

BENKAI Co.,Ltd

GOLD INC
18245 E 40TH AVE AURORA CO 80011 US

需要得到结果:

公司名 官方网站
JPW INDUSTRIES INC http://http://www.jpwindustries.com/
Fujian Xishi Co., Ltd http://www.xishigroup.com/
BusinessPartner Co.,ltd http://www.traderthailand.com/
BENKAI Co.,Ltd http://www.benkaico.com
GOLD INC https://goldbuginc.com/

2.解决

由数据可看出,公司名是绝对存在的,故解决思路是从公司名出发,而不怎么全面的国家以及地址信息则用来提高准确度。

大体思路是这样的,若公司官网存在,那么通过搜索引擎定会被检索到,搜索引擎自然首选 google,所以可以先通过获取谷歌搜索的结果,然后分析获取的结果,从而得出最可能是该公司网站的 url。 初步搜索一下,看看各种情况:

  • 第一种情况,检索即可很直观地得出结果

640?wx_fmt=jpeg

  • 第二种情况,检索不能直观地得出结果,但官网确实存在(第二检索个结果)

640?wx_fmt=jpeg

  • 第三种情况,输入公司名+公司地址和只输入公司名得出的结果不一样

640?wx_fmt=jpeg

对于第三种情况,可以看出输入公司名+公司地址得出的结果是绝对正确的。

观察第三种情况,当输入公司名+公司地址时,返回结果的右侧会出现公司的详细信息,经过验证,若出现这种情况,则其 website对应的 url绝对正确。

故代码的第一步骤可以首先检索公司名+公司地址,观察 website元素是否存在,若存在,返回公司官网,否则,对公司名进行检索,代码如下:

def searchWeb(query, tld='com', lang='en', tbs='0', num=10, safe='off', tpe='', user_agent=None):	
    query = quote_plus(query)	
    get_page(url_home % vars())	
    url = url_search_num % vars()	
    # Request the Google Search results page.	
    html = get_page(url)	
    try:	
        href = re.findall(r'Directions</a><a\s*class="fl"\s*href="(.*?)".*?>Website', str(html))[0]	
        link = filter_result(href)	
        return link	
    except:	
        pass	
    return None

640?wx_fmt=jpeg

能直接获取公司官网毕竟是少数,大多数据还是要通过一步步计算得出,主要经过以下步骤:

  • 获取搜索引擎检索结果提取url

  • 初步排除某些url

  • 余弦相似度计算最可能的结果

2.1.获取搜索引擎检索结果提取url

对于谷歌搜索,我使用了 MarioVilas的项目google,毕竟在国内,为了以防万一我也写了 yahoo搜索,代码如下:

#!/usr/bin/env	
# -*-coding:utf-8-*-	
# script: yahooSearch.py	
__author__ = 'howie'	
import sys	
import time	
if sys.version_info[0] > 2:	
    from urllib.request import Request, urlopen	
    from urllib.parse import quote_plus, urlparse	
else:	
    from urllib import quote_plus	
    from urllib2 import Request, urlopen	
    from urlparse import urlparse, parse_qs	
try:	
    from bs4 import BeautifulSoup	
    is_bs4 = True	
except ImportError:	
    from BeautifulSoup import BeautifulSoup	
    is_bs4 = False	
url_search = "https://search.yahoo.com/search?p=%(query)s&b=%(start)s&pz=%(num)s"	
headers = {	
    'accept-encoding': 'gzip, deflate, sdch, br',	
    'accept-language': 'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4',	
    'upgrade-insecure-requests': '1',	
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',	
    'cache-control': 'max-age=0',	
    'authority': ' search.yahoo.com'	
}	
# 默认user_agent	
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'	
def filter_link(link):	
    try:	
        linkData = urlparse(link)	
        if linkData.netloc and "yahoo.com" not in linkData.netloc and "/search/srpcache" not in linkData.path:	
            return link	
    except Exception:	
        pass	
    return None	
def yahooSearch(query, start=0, num=10, page=1, pause=1.0):	
    """	
    获取雅虎搜索url	
    :param query: 搜索关键词	
    :param start: 开始条目,最好为0	
    :param num: 搜索条目 建议10的倍数	
    :param page: 页数	
    :param pause: 停顿时间	
    :return: 返回url	
    """	
    query = quote_plus(query)	
    while page > 0:	
        url = url_search % vars()	
        time.sleep(pause)	
        request = Request(url)	
        request.add_header('User-Agent', user_agent)	
        response = urlopen(request)	
        html = response.read()	
        if is_bs4:	
            soup = BeautifulSoup(html, 'html.parser')	
        else:	
            soup = BeautifulSoup(html)	
        anchors = soup.find(id="web").find_all('a')	
        for a in anchors:	
            try:	
                link = filter_link(a["href"])	
                if link:	
                    yield link	
            except KeyError:	
                continue	
        start += num + 1	
        page -= 1	
if __name__ == '__main__':	
    # GOLD INC 18245 E 40TH AVE AURORA CO 80011 US	
    for url in yahooSearch("GOLD INC 18245 E 40TH AVE AURORA CO 80011 US"):	
        print(url)

2.2.初步排除某些url

这个可根据个人需求来配置,可添加 webConfig.py脚本,排除某些 url:

# -*-coding:utf-8-*-	
__author__ = 'howie'	
config = dict(	
    # www开头或分割后数组大于二的网站	
    forbid_www=["www.linkedin.com", "www.alibaba.com"],	
    # 非www开头的网站	
    forbid=["imexbb.com", "made-in-china.com"]	
)

以公司名 BENKAICo.,Ltd为例,初步获取url: ['http://www.benkaico.com','http://hisupplier.com','http://www.hktdc.com/en']

2.3.余弦相似度计算最可能的结果

对于公司 BENKAICo.,Ltd,我们获得了三个结果,现在又该如何从该列表中取得最可能的结果呢。

这里可以采用余弦相似度,具体公式可google,稍稍解释下,对于这三个网站:

['http://www.benkaico.com', 'http://hisupplier.com', 'http://www.hktdc.com/en']```	
可以通过计算各个网站的`title`和`BENKAI Co.,Ltd`的相似程度来取得最可能的结果。	
#####2.3.1:对各网站title进行分词	
```python	
{'http://www.benkaico.com': ['benkai', 'co.', ',', 'ltd', '.'], 	
'http://www.hktdc.com/en': ['hktdc.com', 'â\x80\x93', 'page', 'not', 'found'], 	
'http://hisupplier.com': ['china', 'suppliers', ',', 'suppliers', 'directory', ',', 'china', 'manufacturers', 'directory', '-', 'hisupplier.com']}

2.3.2:构建单词向量

{'http://www.benkaico.com': [[0, 1, 1, 1, 1], [1, 1, 1, 1, 1]], 	
'http://www.hktdc.com/en': [[1, 1, 0, 0, 1, 0, 0, 0, 1], [0, 0, 1, 1, 0, 1, 1, 1, 0]],	
 'http://hisupplier.com': [[0, 0, 0, 1, 0, 0, 1, 1, 0, 1], [2, 1, 1, 0, 2, 1, 2, 0, 2, 0]]}

2.3.3:计算余弦相似度

{'http://www.benkaico.com': 0.94427190999915878, 	
'http://www.hktdc.com/en': 0.0, 	
'http://hisupplier.com': 0.31451985913875646}

通过比较,可以看到 http://www.benkaico.com相似度最高的结果,跟真实结果一样。

640?wx_fmt=jpeg

全部步骤代码如下:

# -*-coding:utf-8-*-	
__author__ = 'howie'	
from urllib import parse	
from bs4 import BeautifulSoup	
from collections import defaultdict	
import requests	
import re	
import nltk	
import time	
from config.webConfig import config	
from CosineSimilarity import CosineSimilarity	
from search.yahooSearch import yahooSearch	
from search.gooSearch import search, searchWeb	
class Website(object):	
    """	
    通过公司名等信息获取网站官网	
    """	
    def __init__(self, engine='google'):	
        self.forbid_www = config["forbid_www"]	
        self.forbid = config["forbid"]	
        self.engine = engine	
    def get_web(self, query, address=""):	
        """	
        获取域名	
        :param query: 搜索词	
        :param address: 在此加上地址时,query最好是公司名	
        :return: 返回最可能是官网的网站	
        """	
        if self.engine == 'google' and address:	
            allQuery = query + " " + address	
            result = searchWeb(query=allQuery, num=5)	
            if result:	
                return result	
        allDomain = self.get_domain(query)	
        if len(allDomain) == "1":	
            website = allDomain[0]	
        else:	
            # 初步判断网站域名	
            counts = self.get_counts(allDomain)	
            largest = max(zip(counts.values(), counts.keys()))	
            if largest[0] > len(allDomain) / 2:	
                website = largest[1]	
            else:	
                # 获取对应域名标题	
                domainData = self.get_title(set(allDomain))	
                # 计算相似度	
                initQuery = nltk.word_tokenize(query.lower(), language='english')	
                # 余弦相似性计算相似度	
                cos = CosineSimilarity(initQuery, domainData)	
                wordVector = cos.create_vector()	
                resultDic = cos.calculate(wordVector)	
                website = cos.get_website(resultDic)	
        return website	
    def get_domain(self, query):	
        """	
         获取谷歌搜索后的域名	
        :param query:搜索条件	
        :return:域名列表	
        """	
        allDomain = []	
        if self.engine == "google":	
            for url in search(query, num=5, stop=1):	
                allDomain += self.parse_url(url)	
        elif self.engine == "yahoo":	
            for url in yahooSearch(query):	
                allDomain += self.parse_url(url)	
        if not allDomain:	
            allDomain.append('')	
        return allDomain	
    def parse_url(self, url):	
        allDomain = []	
        domainParse = parse.urlparse(url)	
        # 英文网站获取	
        if "en" in domainParse[2].lower().split('/'):	
            domain = domainParse[1] + "/en"	
        else:	
            domain = domainParse[1]	
        domainList = domain.split('.')	
        # 排除干扰网站	
        if len(domainList) >= 3 and domainList[0] != "www":	
            isUrl = ".".join(domain.split('.')[-2:])	
            if isUrl not in self.forbid:	
                allDomain.append(domainParse[0] + "://" + isUrl)	
        elif domain not in self.forbid_www:	
            allDomain.append(domainParse[0] + "://" + domain)	
        return allDomain	
    def get_title(self, setDomain):	
        """	
        获取对应网站title,并进行分词	
        :param allDomain: 网站集合	
        :return: 网站:title分词结果	
        """	
        domainData = {}	
        for domain in setDomain:	
            headers = {	
                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",	
                "Accept-Encoding": "gzip, deflate, sdch",	
                "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4",	
                "Cache-Control": "max-age=0",	
                "Proxy-Connection": "keep-alive",	
                "Upgrade-Insecure-Requests": "1",	
                "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36",	
            }	
            try:	
                data = requests.get(domain, headers=headers).text	
                soup = BeautifulSoup(data, 'html.parser')	
                title = soup.title.get_text()	
                title = re.sub(r'\r\n', '', title.strip())	
                titleToken = nltk.word_tokenize(title.lower(), language='english')	
                domainData[domain] = titleToken	
            except:	
                pass	
        return domainData	
    def get_counts(self, allDomain):	
        """	
        返回网站列表各个域名数量	
        :param allDomain: 网站列表	
        :return: 网站:数量	
        """	
        counts = defaultdict(int)	
        for eachDomain in allDomain:	
            counts[eachDomain] += 1	
        return counts	
if __name__ == '__main__':	
    # allQuery = ["National Sales Company, Inc.", "Decor Music Inc.","Fujian Xishi Co., Ltd","Kiho USA Inc.","BusinessPartner Co.,ltd","BENKAI Co.,Ltd"]	
    # GOLD INC 18245 E 40TH AVE AURORA CO 80011 US	
    allQuery = ["ALZARKI INTERNATIONAL"]	
    website = Website(engine='google')	
    for query in allQuery:	
        time.sleep(2)	
        website = website.get_web(query=query)	
        print(website)

计算余弦相似度代码

# -*-coding:utf-8-*-	
# script: CosineSimilarity.py	
__author__ = 'howie'	
import numpy as np	
from functools import reduce	
from math import sqrt	
class CosineSimilarity(object):	
    """	
    余弦相似性计算相似度	
    """	
    def __init__(self, initQuery, domainData):	
        self.title = initQuery	
        self.data = domainData	
    def create_vector(self):	
        """	
        创建单词向量	
        :return: wordVector = {} 目标标题以及各个网站标题对应的单词向量	
        """	
        wordVector = {}	
        for web, value in self.data.items():	
            wordVector[web] = []	
            titleVector, valueVector = [], []	
            allWord = set(self.title + value)	
            for eachWord in allWord:	
                titleNum = self.title.count(eachWord)	
                valueNum = value.count(eachWord)	
                titleVector.append(titleNum)	
                valueVector.append(valueNum)	
            wordVector[web].append(titleVector)	
            wordVector[web].append(valueVector)	
        return wordVector	
    def calculate(self, wordVector):	
        """	
        计算余弦相似度	
        :param wordVector: wordVector = {} 目标标题以及各个网站标题对应的单词向量	
        :return: 返回各个网站相似度值	
        """	
        resultDic = {}	
        for web, value in wordVector.items():	
            valueArr = np.array(value)	
            # 余弦相似性	
            squares = []	
            numerator = reduce(lambda x, y: x + y, valueArr[0] * valueArr[1])	
            square_title, square_data = 0.0, 0.0	
            for num in range(len(valueArr[0])):	
                square_title += pow(valueArr[0][num], 2)	
                square_data += pow(valueArr[1][num], 2)	
            squares.append(sqrt(square_title))	
            squares.append(sqrt(square_data))	
            mul_of_squares = reduce(lambda x, y: x * y, squares)	
            resultDic[web] = numerator / sum_of_squares	
        return resultDic	
    def get_website(self, resultDic):	
        """	
        获取最可能是官网的网站	
        :param resultDic: 各个网站相似度值	
        :return: 最可能的网站 也可能为空	
        """	
        website = ''	
        largest = max(zip(resultDic.values(), resultDic.keys()))	
        if largest[0]:	
            website = largest[1]	
        # 当相似度为0	
        else:	
            websites = [key for key, values in resultDic.items() if values == 0.0]	
            for eachWebsite in websites:	
                keyword = ','.join(self.data[eachWebsite]).lower()	
                if 'home' in keyword or "welcome" in keyword:	
                    website = eachWebsite	
        return website

3.总结

至此,若有更好的解决方案,欢迎赐教,谢谢。

往期推荐:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python之由公司名推算出公司官网(余弦相似度) 的相关文章

  • Day_1 Part_4 Structures of R

    1 Vector Matrix Array 1 1 What are they Collection of observations Vector 1 dimensional Matrix 2 dimensional Array 3 dim
  • 常见web漏洞及防范(转)

    单个漏洞 需要进行排查与整改 借着别人的智慧 做一个简单的收集 最好能够将常见漏洞 不限于web类的 进行一个统一的整理 这是今年的任务 进行漏洞的工具的收集 为未来的工作做好基础 一 SQL注入漏洞 SQL注入攻击 SQL Injecti
  • MMDetection 3.x中的PackDetInputs

    MMDetection 3 X 里面对pipeline有一个重点修改是新增了 PackDetInputs 有利于统一 进行检测 语义分割 全景分割任务 从配置文件中我们可以看出包含LoadImageFromFile LoadAnnotati
  • electron在BrowserWindow中禁止右键菜单

    最近使用 electron vite solid js 做一个网络流量实时监控的小工具 其中需要禁止用户在获取 BrowserWindow 焦点后弹出默认右键菜单 解决方案 在 new BrowserWindow 后中添加以下代码 禁止右键
  • 静默执行bat文件

    让bat隐藏运行需要用vbs文件才能实现 方式一 使用vbs文件 新建一个 文本文档后缀改为 vbs 可以这样写 set ws WScript CreateObject WScript Shell ws Run d yy bat 0 其中d
  • 《区块链技术与应用》学习笔记2——BTC数据结构

    Hash pointer 哈希指针 指针 在程序运行过程中 需要用到数据 最简单的是直接获取数据 但当数据本身较大 需要占用较大空间时 明显会造成一定麻烦 因此可以引用指针 每次获取相应的数据即可 实际使用中 指针实际上存储的是逻辑地址更多
  • C语言用scanf来判断键盘输入数据类型

    2 可以用来判断是否和定义的类型一致 如 int n if scanf d n 1 else 可以用来判断键盘输入的数据是否是整数
  • 打不开微软自带的软件,或者初次安装sql server 提示下载不了,版本不支持的,一定检查一下这里

    检查这里 这里一定要把代理模式关掉 血的教训啊
  • 吉首大学_编译原理实验题_基于预测方法的语法分析程序的设计【通过代码】

    一 实验要求 实验二 基于预测方法的语法分析程序的设计 一 实验目的 了解预测分析器的基本构成及用自顶向下的预测法对表达式进行语法分析的方法 掌握预测语法分析程序的手工构造方法 二 实验内容 1 了解编译程序的基于预测方法的语法分析过程 2
  • GFS论文解读

    文章目录 1 设计概述 1 1 假设 1 2 GFS架构 1 3 读取流程 1 4 元数据 1 5 操作日志 1 6 一致性模型 2 系统交互 2 1 契约机制 2 2 数据写入过程 2 3 数据流 2 4 原子的记录追加 1 设计概述 1
  • Leetcode[链表] 反转链表 -- 双指针法

    0 题目描述 leetcode原题链接 反转链表 1 双指针法 定义两个指针 pre 和 cur pre 在前 cur 在后 每次让 pre 的 next 指向 cur 实现一次局部反转 局部反转完成之后 pre 和 cur 同时往前移动一
  • Kotlin 31. Kotlin 如何删除文件或文件夹

    Kotlin 如何删除文件或文件夹 比如 我们想要删除 Documents 年月日 文件夹下面的所有文件 包括这个文件夹 我们首先需要获得 Documents 的路径 val extDir File Environment getExter
  • ESP32——WIFI

    WiFi Wi Fi 库支持配置及监控 ESP32 Wi Fi 连网功能 WiFi工作模式 基站模式 即 STA 模式或 Wi Fi 客户端模式 此时 ESP32 连接到接入点 AP AP 模式 即 Soft AP 模式或接入点模式 此时基
  • 第二章 构造函数语意学 编译器何时合成拷贝构造函数?

    首先要清楚位拷贝 浅拷贝 和值拷贝 深拷贝 的区别 参考http blog sina com cn s blog a2aa00d70101gpvj html 位拷贝 及 bitwise copy 是指将一个对象的内存映像按位原封不动的复制给
  • STM32开发实例 基于STM32单片机的氛围灯

    一 系统设计 我想做的是个基于WIFI 的智能氛围灯 这个灯用app控制 首先这个灯在APP上面可以选择颜色 注 RGB 和亮度调节 音乐律动模式可跟随手机上播放的音乐改变亮度 光照模式白天关灯晚上开灯 人体感应模式有人时开灯反之关灯 智能
  • CSDN竞赛第45期题解

    CSDN竞赛第45期题解 1 题目名称 勾股数 勾股数是一组三个正整数 它们可以作为直角三角形的三条边 比如3 4 5就是一组勾股数 如果给出一组勾股数其中的 两个 你能找出余下的一个吗 ll a b cin gt gt a gt gt b
  • 图神经网络 PyTorch Geometric 入门教程

    简介 Graph Neural Networks 简称 GNN 称为图神经网络 是深度学习中近年来一个比较受关注的领域 近年来 GNN 在学术界受到的关注越来越多 与之相关的论文数量呈上升趋势 GNN 通过对信息的传递 转换和聚合实现特征的
  • php性能优化

    前言 在经历2 3年的时间 php程序员可以完成基本的功能性开发 但是这时候会有一个小瓶颈 就是不知道怎么去优化自己的代码 优化代码主要有两方面 1 php代码规范的优化 让自己代码变的更具可维护性 可读性更强 便于团队开发协作 这里就不作
  • 从char到QChar

    char类型是c c 中内置的类型 描述了1个字节的内存信息的解析 比如 char gemfield g 那么在由gemfield标记的这块内存的大小就是1个字节 信息就是01100111 8位 再比如 char gemfield 汉 那么
  • Java设计模式之观察者模式

    摘录 观察者模式是对象的行为模式 又叫发布 订阅 Publish Subscribe 模式 模型 视图 Model View 模式 源 监听器 Source Listener 模式或从属者 Dependents 模式 观察者模式定义了一种一

随机推荐

  • linux rfkill

    http blog csdn net eager7 article details 8121143
  • FFmpeg音视频播放器流程

    音视频播放器流程 ffmpeg解封装解码流程API ffmpeg官网 FFmpeg
  • [STM32]KEIL调试程序进入HardFault_Handler异常处理总结

    在做CORTEX M3单片机开发的时候 如STM32 可能会遇到设备跑着跑着程序死机的情况 往往调试起来很多时候发现是程序进入HardFault Handler系统异常 根据相关资料和M3权威指南是可以通过调试查找出程序的问题点和解决问题的
  • eclipse gradle打包_Spring Boot(十二):Spring Boot 如何测试打包部署

    部分面试资料链接 https pan baidu com s 1qDb2YoCopCHoQXH15jiLhA 密码 jsam 想获得全部面试必看资料 关注公众号 大家可以在公众号后台回复 知乎 即可 有很多网友会时不时的问我 Spring
  • 一个人的成功不是没有理由的!(人物之楼天城)

    昨天 杭州第十四中学请来毕业生楼天城 给全体学生做励志讲座 讲高中三年的学习生活和理科思维的培养 讲座前 老师介绍 楼天城同学2004年毕业于十四中 保送清华大学 博士毕业 是公认的计算机天才 公认的中国大学生编程竞赛第一人 常以一人单挑一
  • 利用python摘取文本中所需信息,并保存为txt格式

    项目所需 IC设计中难免会处理大量文本信息 我就在项目中遇到了 对于一个几万行的解码模块 提取出其中的指令 如果不用脚本将会很麻烦 下面我将一个小小的例子分享给大家 刚学python 如果有更方便的实现方法清多多指教 目的 1 在几万行解码
  • Git常用命令总结

    Git常用命令总结 git init 在本地新建一个repo 进入一个项目目录 执行git init 会初始化一个repo 并在当前文件夹下创建一个 git文件夹 git clone 获取一个url对应的远程Git repo 创建一个loc
  • openssl的证书链验证

    原文地址 http blog csdn net dog250 article details 5442914 使用openssl验证证书链可以用以下命令 debian home zhaoya openssl openssl verify C
  • C语言分支循环语句

    需提前看 初识C语言 5 C语言一些基本常识 目录 分支语句 if语句 单if语句使用 if else语句 if else if else语句 switch语句 switch基本结构 break作用 default作用 循环语句 while
  • 【Vscode

    Rmd文件转html R语言环境 Vscode扩展安装及配置 配置radian R依赖包 pandoc安装 配置pandoc环境变量 验证是否有效 转rmd为html 注意本文代码块均为R语言代码 在R语言环境下执行即可 R语言环境 官网中
  • shell I/O重定向

    shell重定向 lt 改变标准输入 program lt file 可将program 的标准输入改为file tr d r lt dos file txt 以 gt 改变标准输出 program gt file 可将program的标准
  • Qt基础之三十:百万级任务并发处理

    在实际的开发过程中 经常会遇到要处理大量任务场景 比如说压缩文件夹中的所有文件 对文件夹中的所有文件加密 上传文件夹中的所有文件到ftp等等 这里说百万级并不夸张 理论上文件夹中有任意多个文件都是可以的 本文以压缩文件夹中的100万张jpg
  • 三国志13pk版登录武将输入中文名方法与更改图像详解

    今天来个正经的文 三国志13里登录武将 设定姓名时 如果用的是自带输入法 就会出现一堆乱码 这时候 有两种解决方法 下载一个具有大五码的输入法 然后输入时候既要切换输入法 切换繁体 切换窗口模式 很麻烦 尤其在输入列传的时候 打很多字会很不
  • 【架构优化过程思考】技术方案评估的三个维度

    方案的选择决定了当下实现方案的资源投入及产出对产 也决定后续的成本 评估一个方案 首先要评估这个方案的有效性 也就是说要解决这个问题 实现目标 当前的这个方案是否足够的有效 还是在部分的场景下有效 如果是全部的有效那么该方案就不会出现上线之
  • 二叉树--合并二叉树

    问题 已知两颗二叉树 将它们合并成一颗二叉树 合并规则是 都存在的结点 就将结点值加起来 否则空的位置就由另一个树的结点来代替 思路 通过二叉树的前序遍历方法进行遍历 同时 t1二叉树作为蓝本进行计算 注意设置两个指针记录t1和t2遍历到的
  • JavaScript重写alert,confirm,prompt方法(JavaScript实现线程非阻塞式暂停和启动)

    得有段时间没好好写篇博客了 这次我们从一个题目开始吧 首先我给大家出一道题目 大家可以先思考一下 再往下看 题目是 请用JavaScript重写confirm方法 实现和confirm同样的功能 乍一看可能感觉很简单 定义一个confirm
  • php cms 自动分词,灵活运用PHPAnalysis分词组件,实现Phpcms v9关键词自动分词

    在2019年12月下旬 Phpcms官网phpcms cn关闭后 原有的分词api接口 http tool phpcms cn api get keywords php 已经失效 在录入标题后再也不能自动提取关键词到关键词的输入栏了 针对这
  • ReentrantLock的实现

    ReentrantLock可重入锁 我们可以利用这个实现对某一个操作约束为同有个时刻只能有一个线程能够操作 我们呢先看一下下面这个demo public class ReentrantLockTest public static void
  • 初级黑客入门指南——强烈推荐

    黑客指的是在计算机或计算机网络中发现弱点的人 尽管这个术语也可以指对计算机和计算机网络有深入了解的人 黑客的动机可能是多方面的 比如利润 抗议或挑战 围绕黑客发展的亚文化通常被称为 地下计算机 但现在它是一个开放的社区 虽然黑客这个词的其他
  • Python之由公司名推算出公司官网(余弦相似度)

    读大学时期写的博文 1 问题 对展会数据分类后 我的新任务是如何通过 公司名 公司地址 国家等海关数据推断出该公司的官网网站 若官网不存在则不考虑 以下数据仅供参考 公司名 国家 地址 JPW INDUSTRIES INC 427 NEW