茉莉Python

voidqueens@hotmail.com

0%

本文首发于我的博客:gongyanli.com

一、搜索引擎

(一)搜索引擎分类

1.分类目录

特征:人工搜集整理,把属于各个类别的高质量网站或网页进行分类,用户通过分级目录来查找高质量的网站
缺点:人工、扩展性不强、绝大部分网站不能被收录
代表:Yahoo、hao123

2.文本检索

特征:采用信息检索模型(布尔、向量空间或概率模型)计算用户查询关键词和网页文本内容的相关程度,并根据其相关匹配的程度进行排序
缺点:没有利用网页之间的链接关系,搜索质量不是很好
代表:AltaVista、Excite

3.链接分析

特征:充分利用网页之间的链接关系,并深入挖掘和利用网页链接所代表的含义,网页链接代表着一种推荐关系,通过分析链接可以在海量内容中找出重要的网页,而流行性代表着被推荐次数多的网页,搜索引擎结合网页流行性和内容相似性来改善搜索质量
缺点:未考虑用户的个性化需求(用户输入的查询请求相同,所有用户都会获得相同的搜索结果)、链接作弊
代表:Google(PageRank链接分析技术)

4.用户中心

特征:理解用户需求为核心(不同用户即使输入同一个查询词,会根据用户的差异性返回不同的结果;即使同一个用户输入相同的查询词,也会因为所在时间和场合不同,产生不同的需求结果)
代表:Google、百度、搜狗等
技术:利用用户发送查询词的时间和地理位置信息,利用用户过去发出的查询词及相应的点击记录等历史信息,来试图理解用户某个短小查询词背后所包含的真正需求

(二)、搜索引擎结构原理

核心问题

用户真正的需求是什么?
哪些信息是和用户需求真正相关的?
哪些信息是用户可以信赖的?

(三)、搜索引擎技术分析

1.全文检索搜索引擎(Full Text Search Engine)

特征:提取互联网各个网站的信息(网页文字为主),建立数据库,检索与用户查询条件相关匹配的记录,排序后将结果返回给用户
代表:Google、Yahoo、AltaVista、Teoma、百度、北大天网

2.目录搜索引擎(Search Index)

特征:严格讲不算真正的搜索引擎,是依靠目录分类来实现搜索功能
代表:Yahoo、搜狐、网易、新浪、hao123

3.元搜索引擎

特征:搜索引擎在接受用户的查询请求时,同时是多个搜索引擎上搜索,而自己不进行WWW遍历,也不具备索引数据库,汇总这些搜索结果,返回给用户
代表:搜星搜索(中文元搜索引擎)

4.其他

搜索引擎组成:搜索器、索引器、检索器和用户接口
中文搜索引擎还包括中文信息处理模块,来完成中文的分词处理、码值转换和全角处理等工作
垂直搜索引擎(主/专题搜索引擎):对互联网中某类专门的信息进行一次整合,只关注某一领域/地域的信息,将信息存储和索引后,用户就可以只检索这部分的信息
垂直搜索引擎与通用搜索引擎的区别:通用面向所有用户,垂直只面向某一领域的用户

传统搜索引擎核心技术:分词技术、网络蜘蛛、索引技术和词频指数
智能搜索引擎核心技术:自动推理技术、本体知识系统、专家系统,智能搜索引擎更看重与其他学科相融合

二、知识图谱

(一)、知识图谱应用

搜索美国总统,分别查看google、百度和Yahoo的搜索结果。



从图片可以看出,Google和百度返回了一个准确的结果,而Yahoo则是返回了一堆链接。

(二)、知识图谱构建流程

1.知识获取:已有知识库或者网上爬取半结构数据

2.知识表示:采用实体-关系-实体的三元组对数据进行表示

3.知识存储:传统的RDF存储或者图数据库

RDF存储:斯坦福可视化工具protege手工构建,效率低,中文支持差;
        使用jena的API来处理RDF的本体数据,半自动构建,可结合virtuoso;
        stardog;
图数据:neo4j,提供cypher查询,同时具有可视化的功能

4.知识可视化:具体应用具体分析

(三)、知识图谱框架

1.传统搜索引擎和知识图谱的变化

信息抽取目标发生了变化,传统的文本指定抽取(ACE)=>海量数据的发现(KBP);
从文本分析为核心转变成了知识发现为核心;
让计算机真正理解用户的查询需求,给出准确答案而不是给出相关的链接序列;

2.OpenKN–王元卓(原理类似于知识图谱)

全生命周期知识处理工作流程:知识获取–知识融合–知识验证–知识计算–知识存储–知识服务与应用

  • 知识库的构建:包括知识获取与知识融合

    知识获取是从开放网页、在线百科和核心词库等数据中抽取概念、实体、属性和关系;
    知识融合的主要目的是实现知识的时序融合和多数据源融合。
    知识库构建完成后得到的知识是显式的知识。

  • 知识计算(属性计算、关系计算、实例计算等)

    除了显式的知识,通过OpenKN的知识计算功能,还可以进一步获得隐式的或推断的知识。

  • 知识验证和处理

    为了检验显式知识和隐式知识的完备性、相关性和一致性,需要对知识进行校验,主要是专家或特定的知识计算方法检查冗余的、冲突的、矛盾的或不完整的知识。

  • 知识存储

    经过验证的海量知识,在OpenKN里存储在一个图数据库(GDB)及关系数据库中。其中GDB中存储显式知识,关系数据库中存储隐式知识

三、搜狗立方

1.搜索结构的变化

2.搜狗知立方整体架构

知立方数据库构建包括:
    本体构建(各类型实体挖掘、属性名称挖掘、编辑系统)
    实例构建(纯文本属性、实体抽取、半结构化数据抽取)
    异构数据整合(实体对齐、属性值决策、关系建立)
    实体重要度计算
    推理完善数据


3.流行知识库

wolframalpha


4.实体构建

各类型实体抽取
属性抽取

5.信息抽取系统的建立

4.实体对齐

5.属性值决策与关系建立

6.推理补充与验证

7.基于CFG句法分析

8.后台检索系统

四、百度知心

(一)、Konwledge Mining

知识挖掘包括:Nameed entity mining(命名实体挖掘)、AVP mining(属性-值对挖掘)、Hyponymy learning(上下位学习)、Related entity mining(相关实体挖掘)

1.命名实体挖掘

  Traditional NE categories(传统命名实体类别)
        – person, location, organization
  Many more new categories useful for web applications(更多对web应用程序有用的新类别)
        - Movie, TV series, music, book, software, computer game
  More fine-grained taxonomy(更精细的分类)
        – Organization -> {school, hospital, government, company,…}
        – Computer game -> {net game, webpage game,…}
  Characteristics of NEs on the web
        – New NEs emerge rapidly, especially for software, games, and novels
        – Names of NEs on the web are informal


 (1)从查询日志(Query Logs)中学习命名实体(NEs)
        - 查询日志中包含了大量NE,大约70%的搜索查询包含了NEs
        - NEs能够被上下文特征(context  features)识别
        - Bootstrapping approach
            给出某一分类的种子NEs,从查询中学习种子的上下文特征,然后用已经学习到的上下文特征来提取分类的新种子实体,最后使用扩展的种子集去扩展上下文特征
        - 优点:覆盖最新出现的命名实体
        - 缺点:旧的或不受欢迎的命名实体会被忽略

  (2)从普通文本中学习命名实体
        - 文字包装器(Text Wrappers)被广泛用于从纯文本中提取NEs
        - Wrapper example: “电影《[X]》 ”, “影片[X],导演”
        – [X] is a placeholder that can be filled with movie names

  (3)使用url-text混合模式学习命名实体(Learning NEs using Url-text Hybrid Patterns)

2.属性-值对挖掘(AVP Mining)

AVP数据来源:
    - 在线百科--百度百科、Wikipedia、互动百科
    - 垂直网站--IMDB、douban for videos
    - 普通网友文档--从结构化、半结构化和非结构化文本中挖掘AVP
(1) 挖掘在线百科AVP数据

(2) 挖掘垂直网站AVP数据

(二)、Semantic Computation

本文首发于我的博客:gongyanli.com

前言:本文主要讲解Scrapy的数据持久化,主要包括存储到数据库、json文件以及内置数据存储

持久化存储——JSON

pipelins.py

`import json
 from scrapy.exceptions import DropItem
 class myPipeline(object):
     def __init__(self):
        self.file=open('test.json','wb')

    def process_item(self,item,spider):
        if item['title']:
            line=json.dumps(dict(item))+'\n'
            self.file.write(line)
            return item
        else:
            raise DropItem("Missing title in %s" % item)`

持久化存储——MongoDB数据库

`class myPipeline(object):
 def __init__(self):
    self.client = pymongo.MongoClient(host=settings['MONGO_HOST'], port=settings['MONGO_PORT'])
    self.db = self.client[settings['MONGO_DB']]
    # self.coll = self.db[settings['MONGO_COLL2']]
    self.chinacwa = self.db['chinacwa']
    self.iot = self.db['iot']
    self.ny135 = self.db['ny135']
    self.productprice = self.db['productprice']
    self.allproductprice = self.db['allproductprice']

 def process_item(self, item, spider):
    if isinstance(item, ChinacwaItem):
        try:
            if item['article_title']:
                item = dict(item)
                self.chinacwa.insert(item)
                print("插入成功")
                return item
        except Exception as e:
            spider.logger.exceptionn("")`

持久化存储——内置数据存储

settings

1.JSON
> FEED_FORMAT:json
> 所用的内置输出类:JsonItemExporter

2.JSON lines
> FEED_FORMAT:jsonlines
> 所用的内置输出类:JsonLinesItemExporter

3.CSV
> FEED_FORMAT:csv
> 所用的内置输出类:CsvItemExporter

4.XML
> FEED_FORMAT:xml
> 所用的内置输出类:XmlItemExporter

5.Pickle
> FEED_FORMAT:pickle
> 所用的内置输出类:PickleItemExporter

6.Marshal
> FEED_FORMAT:marshal
> 所用的内置输出类:MarshalItemExporter

> 使用方法:
$ scrapy crawl mySpider -o test.csv

NLTK语料库

from nltk.corpus import webtext:网络文本语料库,网络和聊天文本

from nltk.corpus import brown:布朗语料库,按照文本分类好的500个不同来源的文本

from nltk.corpus import reuters:路透社语料库,1万多个新闻文档

from nltk.corpus import inaugural:就职演说语料库,55个总统的演说

rom nltk.corpus import gutenberg:大约有36000本免费的电子图书

语料库通用接口

fileids():返回语料库中的文件

categories():返回语料库中的分类

raw():返回语料库的原始内容

words():返回语料库中的词汇

sents():返回语料库句子

abspath():指定文件在磁盘上的位置

open():打开语料库的文件流

加载自己本地的语料库

`from nltk.corpus import PlaintextCorpusReader
corpus_root = '/tmp'
wordlists = PlaintextCorpusReader(corpus_root, '.*')
wordlists.fileids()`

#!groovy
def remote = [:]
remote.allowAnyHosts = true

pipeline {
agent {node {label ‘master’}}
environment {
PATH=”/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin”
}
parameters {
string defaultValue: ‘http://svn.sogou-inc.com/svn/mobilesearch/web/wap_searchhub/trunk', description: ‘svn代码’, name: ‘svn’, trim: true
string defaultValue: ‘10.134.30.112’, description: ‘ip地址’, name: ‘ip’, trim: true
string defaultValue: ‘root’, description: ‘用户名’, name: ‘user’, trim: true
string defaultValue: ‘noSafeNoWork@2014’, description: ‘密码’, name: ‘password’, trim: true
}

stages {
    stage('preprocess') {
      steps {
             withCredentials([sshUserPrivateKey(credentialsId: 'sh_fugailv', keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'userName')]) {
                script {
                    remote.name = "${ip}"
                    remote.host = "${ip}"
                    remote.user = userName
                    remote.password = "${password}"
                    remote.svn="${svn}"
                    remote.allowAnyHosts = true
                }

                sshCommand remote: remote, command: """
                    cd /search/odin/gongyanli/searchhub/pc
                    sh downData.sh
                    cd /search/odin/gongyanli/searchhub/pc/web_test
                    svn sw ${svn} --username 'gongyanli' --password 'Gyl421498170'
                    make -j
                    sh stop.sh
                    sh start_centos7.sh
                """
            }

        }
    } 
stage('mem') {
      steps {
             withCredentials([sshUserPrivateKey(credentialsId: 'sh_fugailv', keyFileVariable: 'identity', passphraseVariable: '', usernameVariable: 'userName')]) {
      script {
        remote.name = "${ip}"
          remote.host = "${ip}"
          remote.user = userName
        remote.password = "${password}"
        remote.svn="${svn}"
        remote.allowAnyHosts = true
      }

      sshCommand remote: remote, command: """
        cd /search/odin/gongyanli/searchhub/pc
        sh mem.sh &
        """
      }

        }
    } 
}

}

本文首发于我的博客:gongyanli.com

参考博客:http://www.shareditor.com/blogshow?blogId=65

前言:NLTK(Natural Language Toolkit) 是一个用于构建处理人类语言数据的python应用的开源平台。它提供了超过50多个素材库和词库资源的易用接口,其中有很多文本处理库,可以用来给文本分类,符号化,提取词根,贴标签,解析,语义推理,或者打包成工业级的自然语言处理库。本文简单介绍了nltk的安装与使用,希望对小伙伴们有用。

一、NTLK库安装

$ pip install nltk

二、NLTK模块与功能介绍

语言处理任务            NLTK模块                功能描述
获取语料库            nltk.corpus            语料库和词典的标准化接口
字符串处理            nltk.tokenize,        分词、句子分解
                    nltk.stem            词干化
搭配研究                nltk.collocations    t-检验、卡方、点互信息
词性标注                nltk.tag            n-gram、backoff、Brill、HMM、TnT
分类                    nltk.classify        决策树、最大熵、朴素贝叶斯、EM、K-Means
                    nltk.cluster        
分块                    nltk.chunk            正则表达式、n-gram、命名实体
解析                    nltk.parse            图标、基于特征、一致性、概率性、依赖项
语义解释                nltk.stem            λ演算、一阶逻辑、模型检验
                    nltk.inference        
指标测评                nltk.metrics        精度、召回率、协议系数
概率与估计            nltk.probalility    频率分布、平滑概率分布
应用                    nltk.app            图形化的关键词排序、分析器、wordnet查看器
                    nltk.chat
语言学领域的工作        nltk.toolbox        处理STL工具箱格式的数据

三、下载书籍

$ python
>>> import nltk
>>> nltk.download()
选择语料库--book进行下载
>>> nltk.book import *
>>> text1
<Text: Moby Dick by Herman Melville 1851>

四、NLTK基本使用

1.搜索文本
    >>> text1.concordancd("next")
    > 显示20个包含next的语句上下文
2.搜索相关词
    >>> text1.similar("boat")
    >查找出boat的近义词等相关词
3.查找词在文章中的位置
    >>> text1.dispersion_plot(["bext","city","America"])
    > 如果出现错误,请记得安装matplotlib
    > pip install matplotlib
4.词统计
    len(text1):返回总字数
    set(text1):返回文本的所有词集合
    len(set(text4)):返回文本总词数
    text4.count("is"):返回“is”这个词出现的总次数
    FreqDist(text1):统计文章的词频并按从大到小排序存到一个列表里
    fdist1 = FreqDist(text1);fdist1.plot(50, cumulative=True):统计词频,并输出累计图像
    fdist1.hapaxes():返回只出现一次的词text4.collocations():频繁的双联词

五、NLTK–文本预处理

1.分词
(1)英文分词

方法1:将文本分割成单词
split()
方法2:将文本分割成句子
from nltk.tokenize import sent_tokenize
sent=sent_token(text)
方法3:将文本分割成单词
from nltk.tokenize import word_tokenize
word=word_tokenize(text)

(2)非英文分词

from nltk.tokenize import sent_tokenize
sent=sent_token(text,"french")

2.词干化处理(stem)

文档分词后一般要进行词干化处理,词干化处理就是将名词复数变为单数,动词不同时态变为基本时态等。

from nltk.stem import PorterStemmer
from nltk.corpus import wordnet as wn
from nltk import PorterStemmer
from nltk.stem.lancaster import LancasterStemmer

def stemWords(self,wordsList):

    # 方法1
    porter=PorterStemmer()
    result=[porter.stem(w) for w in wordsList]
    # 方法2
    stemWords=[]
    for words in wordsList:
        stemWords+=[[wn.morphy(w) for w in words]]
    return stemWords
    # 方法3--支持非英文词干化提取
    stemmer=SnowballStemmer("english")
    result=stemmer.stem("imaging")
    # 方法4
    lancaster_stemmer = LancasterStemmer()
    lancaster_stemmer.stem(‘saying’)

3.单词变体还原–将单词还原成一个真实的单词
当用PorterStemmer和PorterStemmer对imaging这个单词进行词干化处理时,得到的结果是imag,显然这并不是我们想要的结果,所以这时候就很有必要进行还原。
有时候将单词变体还原时,总是得到同样的词,这是因为语言默认部分为名词,要想得到动词,使用pos=”v”

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('imaging', pos="v"))

pos="v"--动词
pos="n"--名词
pos="a"--形容词
pos="r"--副词

4.停用词处理(stopwords)

from nltk.corpus import stopwordds
stopwordset=stopwords.words("english")
clean_tokens=list()
for token in tokens:
    if token not in stopwordset:
        clean_tokens.append(token)
# clean_list=[token for tokens in text if token not in stopwordset]

5.同义词处理

# WordNet是一个为自然语言处理而建立的数据库,包含一些同义词组及简短定义
from nltk.corpus import wordnet
# 获取单词的定义和示例
  syn = wordnet.synsets("pain")
print(syn[0].definition())
print(syn[0].examples())
# 获取同义词
synonyms = []
for syn in wordnet.synsets("computer"):
    for lemma in syn.lemmas():
        synonyms.append(lemma.name())
print(synonyms)

6.反义词处理

from nltk.corpus import wordnet
  antonyms = []
for syn in wordnet.synsets("small"):
    for l in syn.lemmas():
        if l.antonyms():
            antonyms.append(l.antonyms()[0].name())
print(antonyms)

7.词性标注(pos tagger)

import nltk
tokens=nltk.pos_tag(tokens) # 进行词性标注

# 查看相关说明文档
nltk.help.upeen_tagset("JJ")
nltk.help.upeen_tagset("IN")
nltk.help.upeen_tagset("NNP")

8.去掉数字标点和非字母字符

def CleanLines(self,line):  
    identify = string.maketrans('', '')  
    delEStr = string.punctuation +string.digits  #ASCII 标点符号,数字    
    cleanLine =line.translate(identify,delEStr) #去掉ASCII 标点符号  
   return cleanLine  

9.拼写检查

def WordCheck(self,words):#拼写检查  
    d = enchant.Dict("en_US")  
    checkedWords=()  
    for word in words:  
        if not d.check(word):  
            d.suggest(word)  
            word=raw_input()  
        checkedWords = (checkedWords,'05')  
   return checkedWords  

六、NLTK结合Stanford NLP工具包进行文本处理

待完成

本文首发于我的博客:gongyanli.com

github:https://github.com/Gladysgong/3D_earth_all

csdn: http://blog.csdn.net/u012052168/article/details/78459872

前言:因为要做一个3D地球,之前也没怎么用过echarts,再加上就是个业余前端水平,所以折腾了好久,代码下载下来可以直接运行,具体情况看我每个里面怎么说的。小伙伴们可以自己先研究一下,等有时候我详细代码注释一下。

1.worldFlights

所用框架:philogl
位置:examples\worldFlights
说明:philogl (https://github.com/senchalabs/philogl) 官方项目下的一个demo,把全球飞行航线在3d地球上表示出来。

2.airline_china

所用框架:philogl
说明: 一位博主基于philogl官方项目的demo改写而成,把全球的飞行路线改为了中国飞行路线(参照:examples\worldFlights)

3.3dmap

所用框架:echart-x
说明:利用echart-x制作的3d地球,其数据是把根据经纬度的高低来对国家进行分类(高、中、低)

4.echarts-gl

说明:echarts-gl官方项目,我使用npm拉取代码后,依然运行有问题,显示不清楚,所以弃用,可能还是我自己哪里有问题,但是没找出来。

5.echarts3D-globe

所用框架:echarts-gl
说明:一位童鞋(不好意思,等我有时间把你的gith补上,么么哒)利用echarts-gl而制作的3d地球,模拟的是网络攻击的数据,但我发现依然使用的是飞行航线的数据,所以这个数据究竟能否反应网络攻击有待证实。

6.earth

所用框架:echarts-gl
说明:基于echarts3D-globe重写了一个适合自己需要的精简的地球

7.earth-x

所用框架:echarts-x
说明:基于3dmap重写了一个适合自身需要的最终地球。

本文首发于我的博客:gongyanli.com
github: https://github.com/Gladysgong/Gladysgong.github.io

一、快速创建个人Github Pages

1.什么是Github Pages

GitHub Pages 本用于介绍托管在GitHub的项目,不过由于他的空间免费稳定,很适合用来搭建一个博客。

每个帐号只能有一个仓库来存放个人主页,而且仓库的名字必须是username/username.github.io,这是特殊的命名约定。你可以通过http://username.github.io 来访问你的个人主页,比如我的就是gladysgong.github.io。

这里特别提醒一下,需要注意的个人主页的网站内容是在master分支下的。

2.创建自己的Github Pages

新建代码仓库(repository),此处命名格式有限制的,形如username.github.io

这里写图片描述
这里写图片描述

github page site已经建好,浏览器输入例如http://username.github.io,(该示例界面为空),可以自己push一个index页面来显示内容,开启你的blog把!

我的blog是gladysgong.github.io,可以打开看一下哟!如果文章对您有帮助,右侧fork进入star我一下,我会美美哒一天。

3.如何搭建一个独立博客——简明Github Pages与Hexo教程

二、搭建环境

1.安装node.js
2.安装npm
3.安装git,如果前面要commit、push,那之前就应该安装
4.github账户配置

三、Hexo安装

$ cd d:/hexo
$ npm install hexo-cli -g
$ hexo init blog
$ cd blog
$ npm install
$ hexo g # 或者hexo generate
$ hexo s # 或者hexo server,可以在http://localhost:4000/ 查看(hexo s -p 8023端口被占用时)

这里写图片描述

四、Hexo主题切换

Hexo默认主题是landscape,大家可以切换成为next或者yilia的风格
1.安装主题

$ hexo clean
$ git clone https://github.com/litten/hexo-theme-yilia.git themes/yilia

2.启用主题

修改Hexo目录下的_config.yml配置文件中的theme属性,将其设置为yilia。

3.更新主题

$ cd themes/yilia
$ git pull
$ hexo g # 生成
$ hexo s # 启动本地web服务器

4.打开http://localhost:8023/ ,我们就会看到一个全新的界面。

五、部署Hexo到Github Pages

1.部署Hexo到Github Pages上的原理

a.第一步中我们在Github上创建了一个特殊的repo(gladysgong.github.io)一个最大的特点就是master中的html静态文件,可以通过链接http://gladysgong.github.io来直接访问。
b.Hexo -g 会生成一个静态网站(第一次会生成一个public目录),这个静态文件可以直接访问。
c.将hexo生成的静态网站,提交(git commit)到github上。

2.使用hexo deploy部署到github

在配置文件_config.xml中以下改动:
deploy:
  type: git
  repo: git@github.com:gladysgong/gladysgong.github.io.git
  branch: master

3.安装扩展(不安装会出错)

$ npm install hexo-deployer-git --save

4.在命令行中执行

hexo d

六、申请域名https://sg.godaddy.com/zh/

可以申请的地方很多,我选择的是goDaddy,注册登录选择域名,支付宝付款,ok。

七、DNS解析

1.注册DNSpod
2.进入域名解析,输入你的域名,添加记录进行配置
这里写图片描述
3.记录类型

记录类型A代表指向github pages所提供的ip
记录类型CNAME代表指向username.github.io
用A类型的话,当github pages所提供的ip改变的话,你就需要来改变此处的ip,用CNAME则不需要。

4.创建CNAME

$ cd source
$ 创建CNAME
$ 内容为你的域名(比如我的:gongyanli.com)
$ commit & push

八、hexo部署后把原来的仓库覆盖

1.使用Hexo搭建博客需要区分【博客源代码】和【博客生成代码】

『博客源代码』:Hexo的源码,包括themes目录(博客模板),source目录(使用MarkDown写的博客)等

『博客生成代码』:执行hexo generate或者hexo server命令生成的代码,是Hexo自动生成的,在public目录里面。

『博客源代码』需要使用Git做版本管理,而『博客生成代码』需要使用Git部署。因此容易混淆。

2.方法1:使用2个不同的Git仓库分别管理『博客源代码』和『博客生成代码』

在GitHub新建一个仓库,然后将『博客源代码』同步到新项目。『博客生成代码』仍然由gladysgong/gladysgong.github.io部署。

3.方法2:使用同一个Git仓库的2个不同的Git分支分别管理『博客源代码』和『博客生成代码』

修改Hexo的配置文件_config.yml,将『博客生成代码』部署到gladysgong/gladysgong.github.io仓库的develop分支:
deploy:
    type: git
    branch: develop
    repo: https://github.com/gladysgong/gladysgong.github.com

九、bug

1.hexo报错:

YAMLException: cannot read a block mapping entry; a multi line key may not be an implicit key at line 5, column 1: # Site

YAMLException: cannot read a block mapping entry; a multi line key may not be an implicit key at line 13, column 1: # URL
配置文件:_config.yml  中 # Site #URL 属性设置后面的:需要有空格再填写内容!!!

2.npm各种提示权限不够,windows下即使开了administrator也提示权限不够

无奈,卸载npm,用淘宝npm镜像重装一个,安装后一路畅通。
安装方法:npm install -g cnpm --registry=https://registry.npm.taobao.org
参考链接:http://npm.taobao.org/
之后所用命令只需改为cnpm即可

3.hexo s运行时默认4000端口被占用

尝试过解除端口,无奈我的4000端口被360浏览器占用
hexo s -p 8022
重启一个8022或者任意一个没被占用的端口即可