该文档涉及的组件

三国演义人物和内容搜索

简介

内容搜索是一个非常常用的功能,搜索一切想搜索的内容。

本文以三国演义小说为例

演示网址: https://app.aboutdata.top/sanguo/#/sanguo_home

小笨羊网址: https://xiaobenyang.com/

如有问题,请联系小笨羊微信:

主要包括下面四个内容,

  • 三国内容搜索


  • 三国人物图谱


  • 三国人物关系

  • 三国演义原文阅读

数据介绍

三国演义原文数据

  • 数据Schema

列名

列类型

说明

chapter_id

Int

章节ID,从1开始

chapter_title

String

章节标题

chapter

String

章节内容

  • 统计分析

可以看出,一共有120章,每章平均长度不到五千字。

三国人物数据

  • 数据Schema

列名

列类型

说明

f00

STRING

姓名

f01

STRING

姓

f02

STRING

名

f03

STRING

字

f04

STRING

籍贯郡

f05

STRING

籍贯县

f06

STRING

亲属

f07

STRING

师从

f08

STRING

别称

f09

STRING

县令/长

f10

STRING

太守/相

f11

STRING

刺史/州牧

f12

STRING

都尉

f13

STRING

校尉

f14

STRING

中郎将

f15

STRING

将军

f16

STRING

九卿

f17

STRING

三公

f18

STRING

侍中/尚书

f19

STRING

爵位

f20

STRING

谥号

f21

STRING

来源

  • 统计分析


可以看出,三国任务图谱里有4565任,其中姓张的最多,只有34%的人有字,577人是将军。

三国内容搜索

这里使用AlinkLab "全文搜索" 应用。给定一个或多个关键词,或者表达式,给出最相关的章节,并高亮。

例如搜索 大都督


可以看出,陆逊,曹真,周瑜,吕蒙,司马昭都做过大都督。

我们按照如下几步,介绍如何用AlinkLab做文本搜索。

按照下面的步骤搭建训练模型和部署。如果不想搭建,可以跳过下面步骤,直接查看已搭建好的任务,复制运行。

1. 使用"全文搜索"应用,填写参数配置


参数配置如下:

参数名称

参数内容

说明

文件路径

mylabdata://xiaobengyang.com/name/demo/sanguo.ak

输入数据,包括三国演义的章节名称和内容

文本检索列

["chapter_title", "chapter"]

文本检索列,先分词再按照分词结果检索。

这里选择了两列

chapter_title:章节标题

chapter: 章节内容

原始检索列

["chapter_id"]

原始检索列,部分词直接原文匹配。

这里选择了一列:

chapter_id:章节ID

分词方法

IkAnalysis

分词方法,一般都是用Ik分词

返回数据条数

10

每个搜索请求,最多返回10条结果

检索条件的列名

search_content

预测服务输入的列名

预测服务名称

sanguo/三国搜索A

预测服务名称

是否输出原文

否

"是": 输出原文 + 高亮段落

"否": 输出高亮段落,不输出原文

2. 导入搭建好的应用

https://xiaobenyang.com/discuss-post?id=142

3. 查看已部署的服务

https://xiaobenyang.com/discuss-post?id=163

4. API调用预测服务

4.1. API参数

参数

名称

说明

predServId

服务ID

在服务页面上查看服务名称对应的ID

search_content

搜索内容

搜索内容,和应用里"检索条件的列名" 一致

4.2. API请求示例
var axios = require('axios')
  
//设置小笨羊API访问URL
axios.defaults.baseURL = 'https://xiaobenyang.com/pred'
  
// 设置访问ApiKey, 在管理页面查询https://xiaobenyang.com/calc?func=LabPage&proc=ListMyApikey
axios.defaults.headers.common['APIKEY'] = '*'

axios.post(null,{
            'predServId': '34',
            'search_content': this.query.words
})
4.3. API 返回格式

返回结果是列表,每个里面包含原文搜索列和高亮列。高亮列会在元列名后加"_highlight"。

4.4. API结果示例
[
  {
    "chapter_highlight": "正文 第六十五回 马超大战葭萌关 <span style='color:red'>刘备</span>自领益州牧\n\n却说阎圃正劝张鲁勿助刘璋,只见马超挺身出曰:“超感主公之恩,无可上报,愿领一军攻取葭萌关,生擒<span style='color:red'>刘备</span>,务要刘璋割二十州奉还主公。”张鲁大喜,先遣黄权",
    "chapter_title_highlight": "马超大战葭萌关 <span style='color:red'>刘备</span>自领益州牧",
    "chapter_id": 65
  },
  {
    "chapter_highlight": ",如何中用,你却与他做保!他若不还时,必须连累足下,主公见罪奈何?”肃闻言,呆了半晌,曰:“恐玄德不负我。”瑜曰:“子敬乃诚实人也。<span style='color:red'>刘备</span>枭雄之辈,诸葛亮奸猾之徒,恐不似先生心地。”肃曰:“若此,如之奈何",
    "chapter_title_highlight": "吴国太佛寺看新郎 刘皇叔洞房续佳偶",
    "chapter_id": 54
  },
  {
    "chapter_highlight": "帛散给侍婢,以买其心,先教孙乾回荆州报喜。自此连日饮酒。国太十分爱敬。\n却说孙权差人来柴桑郡报周瑜,说:“我母亲力主,已将吾妹嫁<span style='color:red'>刘备</span>。不想弄假成真。此事还复如何?”瑜闻大惊,行坐不安,乃思一计,修密书",
    "chapter_title_highlight": "玄德智激孙夫人 孔明二气周公瑾",
    "chapter_id": 55
  },
  {
    "chapter_highlight": "<span style='color:red'>刘备</span>。备惧东吴,必投曹操。若是,则江南何日得安?为今之计,莫若使人赴许都,表<span style='color:red'>刘备</span>为荆州牧。曹操知之,则惧而不敢加兵于东南。且使<span style='color:red'>刘备</span>不恨于主公。然后使心腹用反间之计,令曹、刘相攻,吾乘隙而图之,斯为得耳",
    "chapter_title_highlight": "曹操大宴铜雀台 孔明三气周公瑾",
    "chapter_id": 56
  },
  {
    "chapter_highlight": "正文 第十六回 吕奉先射戟辕门 曹孟德败师淯水\n\n却说杨大将献计欲攻<span style='color:red'>刘备</span>。袁术曰:“计将安出?”大将曰:“刘备屯军小沛,虽然易取,奈吕布虎踞徐州,前次许他金帛粮马,至今未与,恐其助备;今当令人送与",
    "chapter_title_highlight": "吕奉先射戟辕门 曹孟德败师淯水",
    "chapter_id": 16
  },
  {
    "chapter_highlight": "麾军冲击,曹兵大败而退。单福命休追赶,收军自回。却说曹仁输了一阵,方信李典之言;因复请典商议,言:“<span style='color:red'>刘备</span>军中必有能者,吾阵竟为所破。”李典曰:“吾虽在此,甚忧樊城。”曹仁曰:“今晚去劫寨。如得胜,再作",
    "chapter_title_highlight": "玄德用计袭樊城 元直走马荐诸葛",
    "chapter_id": 36
  },
  {
    "chapter_highlight": "正文 第三十七回 司马徽再荐名士 刘玄德三顾草庐\n\n却说徐庶趱程赴许昌。曹操知徐庶已到,遂命荀彧、程昱等一班谋士往迎之。庶入相府拜见曹操。操曰:“公乃高明之士,何故屈身而事<span style='color:red'>刘备</span>乎?”庶曰:“某幼逃难",
    "chapter_title_highlight": "司马徽再荐名士 刘玄德三顾草庐",
    "chapter_id": 37
  },
  {
    "chapter_highlight": "扫清中原,有何盗贼?”松曰:“南有孙权,北有张鲁,西有<span style='color:red'>刘备</span>,至少者亦带甲十余万,岂得为太平耶?”操先见张松人物猥琐,五分不喜;又闻语言冲撞,遂拂袖而起,转入后堂。左右责松曰:“汝为使命,何不知礼,一味",
    "chapter_title_highlight": "张永年反难杨修 庞士元议取西蜀",
    "chapter_id": 60
  },
  {
    "chapter_highlight": " 正文 第六十二回 取涪关杨高授首 攻雒城黄魏争功\n\n却说张昭献计曰:“且休要动兵。若一兴师,曹操必复至。不如修书二封:一封与刘璋,言刘备结连东吴,共取西川,使刘璋心疑而攻<span style='color:red'>刘备</span>;一封与张鲁,教进兵",
    "chapter_title_highlight": "取涪关杨高授首 攻雒城黄魏争功",
    "chapter_id": 62
  },
  {
    "chapter_highlight": ",即皇帝位,名正言顺,以讨国贼。事不宜迟,便请择吉。”玄德大惊曰:“军师之言差矣。<span style='color:red'>刘备</span>虽然汉之宗室,乃臣子也;若为此事,是反汉矣。”孔明曰:“非也。方今天下分崩,英雄并起,各霸一方,四海才德之士,舍死亡",
    "chapter_title_highlight": "玄德进位汉中王 云长攻拔襄阳郡",
    "chapter_id": 73
  }
]

三国人物图谱

三国人物图谱是展示三国滚滚长河中出现的人物

也可以进行关键词搜索,例如搜素"关羽",结果中包含关羽,关羽的儿子和关羽的孙子。



具体步骤如下,

1. 使用 "全文检索"应用,填写参数配置

参数配置如下:

参数名称

参数内容

说明

文件路径

mylabdata://aboutdata.top/sanguo_person.ak

输入数据,包括三国人物信息

文本检索列

["f00", "f01", "f02", "f03", "f04", "f05", "f06", "f07", "f08", "f09", "f10", "f11", "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20"]

文本检索列,先分词再按照分词结果检索。

这里选择了前20列

原始检索列

["chapter_id"]

原始检索列,部分词直接原文匹配。

这里选择了一列:

chapter_id:章节ID

分词方法

IkAnalysis

分词方法,一般都是用Ik分词

返回数据条数

10

每个搜索请求,最多返回10条结果

检索条件的列名

search_content

预测服务输入的列名

预测服务名称

sanguo/三国人物搜索

预测服务名称

是否输出原文

是

"是": 输出原文 + 高亮段落

"否": 输出高亮段落,不输出原文


2. 查看已搭好的应用

https://aboutdata.top/api/calc?func=LabPage&proc=EditJob&jobId=1779429663180810


3. 查看已部署的服务

https://aboutdata.top/api/calc?func=LabPage&proc=ShowMyLabPrediction&myLabPredictionName=sanguo%2F%E4%BA%BA%E7%89%A9%E6%90%9C%E7%B4%A2A

三国演义原文阅读

这里可以直接阅读三国演义


这里使用了"简单查询" 应用,使用"三国演义原文数据",可以进行简单表达式查询,例输入chapter_id=10, 返回第10章内容。输入chapter>-1, 返回所有章节内容。

  1. 使用"简单查询"应用,填写参数配置
  2. 查看已搭好的应用

https://xiaobenyang.com/discuss-post?id=142

1. 查看已部署的服务

https://xiaobenyang.com/discuss-post?id=163


三国人物关系图谱


三国关系图谱,输入一个三国人物,给出最相关的十个人物。下图是搜索"周瑜"


这里使用"人物关系图谱" 应用,具体步骤如下,

1. 使用 "人物关系图谱" 应用,天下配置参数

参数名称

参数内容

说明

内容表

mylabdata://aboutdata.top/sanguo.ak

输入数据,包括三国演义小说章节内容

人物表

mylabdata://aboutdata.top/sanguo_person.ak

输入数据,包括三国人物信息

自定义分词字典

["曹操", "孔明", "玄德", "刘玄德", "刘备", "关羽", "张飞", "云长", "关公", "赵云", "曹孟德", "诸葛亮", "张郃", "孙权", "张辽", "鲁肃", "仲谋"]"

字符串数组,这里主要是三国人物名称

自定义停用词表

["亦", "曰", "遂", "吾", "已", "去", "二人", "今" ... ...]

字符串数组,这里去掉一些文言文的一些词

自定义同义词词表

["玄德:刘备",

"刘玄德:刘备",

"孔明:诸葛亮",

"诸葛孔明:诸葛亮",

"赵子龙:赵云" ... ... ]

字符串数据,将出现的词替换成后面的词。例如"玄德:刘备",会把"玄德"替换成"刘备"。 这里主要是将一个人的字替换成名称,以及常用说法替换。

Word2Vec参数设置

100

embedding的向量长度

6

最小词频,只有出现6次以上的词参与计算相似度

50

迭代次数

输出人物个数

10

找到关系最紧密的10个人

部署预测服务地址

sanguo/三国人物关系


2. 查看搭建好的应用

https://xiaobenyang.com/discuss-post?id=140

3. 查看已部署的服务

4. API调用预测服务

4.1. API参数

参数

名称

说明

predServId

服务ID

在服务页面上查看服务名称对应的ID

word

搜索的人物名称

搜索内容,和应用里"检索条件的列名" 一致

4.2. API请求示例
var axios = require('axios')
  
//设置小笨羊API访问URL
axios.defaults.baseURL = 'https://xiaobenyang.com/pred'
  
// 设置访问ApiKey, 在管理页面查询https://xiaobenyang.com/calc?func=LabPage&proc=ListMyApikey
axios.defaults.headers.common['APIKEY'] = '*'
  
axios.post(null,
      {
        'predServId': '37',
        'word': this.personText
})
4.3. API 返回格式

返回结果有两项,ID是相似人物列表,METRIC是对应的相似值。

4.4. API结果示例
{
  "ID": "[\"刘备\",\"曹操\",\"关羽\",\"诸葛亮\",\"张飞\",\"吕布\",\"孙权\",\"尹赏\",\"赵云\",\"诸葛均\"]",
  "METRIC": "[2.220446049250313E-16,0.16544457314911365,0.17483780432465534,0.17585142804583687,0.17818276052801407,0.18520283995722442,0.19128323851720297,0.1931246414265776,0.20022031005941043,0.20100044977538278]"
}