00:01
好,那我们就继续往后说吧,啊呃,接下来我们研究一个话题,这个话题的话就是这个中文分词。啊,这个分词的话,大家这个现在应该也都理解的差不多了哈,就是把你的词呢,给你什么拆分开啊,存的时候呢拆开,然后按照什么道派收音去存,查的时候呢,我拆开啊然后呢,就按照这个分词的方式呢,去做这个匹配。对吧,好呃,那我们到现在研究的我们都是这个英文的这个数据啊,就是我们数据里面都是这个英文对不对,那接下来我们不得不去研究一下中文啊,因为毕竟是在中国嘛,那你写这个软件,你写项目对吧,你想想啊,在我们这个京东里面,我们这个商品都是什么中文的。那你就要知道这个中文,它是怎么去做这个分词的。是不是啊,来说这个事情我们要去研究一下啊,好,那我们来测试一下吧,这个我就什么直接给你测试啊,我们写到这先测试问题啊,中文分子先看效果,呃,那如果你要做中文分子的话,我们这样哈,我们铺成一个叫movie index,我叫CCU,好吧,这表示是中文的意思。
01:13
了解吧,诶中文的意思啊,行,那比如说我先把这个索引创建出来,创建出来以后呢,呃,我给他几条数据啊,我把它拿过来。好,大家看这几条数据啊,跟我们英文的数据是一模一样子的,唯独不一样的就是我把它写成了中文了,然后呢,把写成了中文了啊写成中文了,OK,行呃,那你在操作的时候,你可以先把这个索引创建出来,然后再给他数据,或者说啊大家注意,我不用提前创建索引。我可以什么直接给数据的同时把索引创建出来。你看这个我是没有执行过的啊,没有执行过的话,你查一下盖一下,就当前我是,嗯。好,你看一下啊,当前我是没有这个索引的啊,我只有一个什么叫做movie index对不对,好,接下来你看了哈,我不单独去创建这个索引,我就什么直接去给数据了,给数据的同时它会把索引给创建好成了吧,成了以后你再去查一下,诶你看就会有一个什么,就会有一个这个movie index ch了啊这个C啊CN啊,OK吧,这也可以啊,就是你在给第一条数据的时候。
02:15
他发现说诶你没有这个索引,好,那我给你创建出来,OK,把来第一条数据,来第二条数据啊,走好,第三条数据走好,全部放进去以后查一下啊get movie index ch,然后呢,下方下search好查一下啊,我们总共有三条数据。对吧,这是第一条数据啊,红海行动,第二条数据叫湄公河行动,然后呢,第三条数据红海事件。OK,好,那这个有了以后啊,接下来接下来干嘛呢?我们要去看这个中文问题了啊,那我现在要去查一个数据,你看啊,这么去查get movie index,嗯,Movie index,好,然后呢,只有一个。Such。然后来吧,来做一个search啊,然后呢,呃,接下来的话,我们这里面写什么,写个query好,Query里面我们写个match,就是我要通过什么呀,通过你的这个还是电影的名字啊,去做一个分次匹配好,那我写个啥呢?我写个。
03:13
嗯。写个什么呀,写个我想想啊。呃。我看一下吧,啊,这里面我举个例子啊,红海战役是吧,来写个红海战役或者什么什么写个都可以啊,红海战役啊,红海红海故事吧。对吧,红外故事啊,行,大家来看看啊,如果说我这么去做这个分词匹配的话,你觉得说我现在这个三条数据啊,三条数据我能够匹配出来几条数据,我把数据给它拿出来啊,拿出来大家这个看一看。好,这是我的第一条数据啊。这是我的第二条数据。啊,大家这个说一下啊,会匹配到会匹配到几条数据啊。
04:04
啊来,这是一,这是二,这是三。最终结果里面会有几条数据啊。几张数据,这应该是很直观的吧,同学们。应该是很直观的啊,你看按照我们的理解的话,就是你将来会拆分成什么红海事件,呃,这个是湄公河行动,这个是红海行动,那我拿他这个红海故事,然后呢,去做匹配的话,那我拆分成红海和故事,那我的红海跟他跟他是能够匹配的,然后这个故事的话呢,你们都没有,那最后的结果应该就是三和一。对吧,来看一下这个结果啊,执行一下好,你看总共两条数据啊,一个是红海事件出来了,一个是红海行动出来了。对吧,诶感觉好像挺正常的啊,没有什么问题好,但其实呢,它是有问题的啊,比如说我再给你查另外一个东西。好,给你查另外一个东西啊,我查一个什么,查一个这个东西,上海银行。
05:05
行,那你看一下吧,按照我们的分析啊,这是红海事件,这是湄公河行动,这个是红海行动,好,那我这个上海银行,我查的时候分成什么上海银行,那你看一下啊,这几个词跟这里面有任何匹配吗?目前看是没有任何匹配的,对不对啊,但其实你发现啊,我们再去查的时候呢,三条数据都能够查出来。你看啊,红海行动出来了吧,红海事件也出来了吧?湄公河行动是不是也出来了?对吧?好,那你看到这个效果的时候呢,你就会恍然大悟,哦,原来他好像并不是按照我预想的去做这个分词的,就如果说你是按照我的预想的去做这个分子,把它分成什么上海和银行,把这个分成什么红外和事件,这个是这样子的,这个是这样子的,那你最终是绝对匹配不出来任何数据的,但目前你能够匹配出来数据的话呢。那我们就来看一下,你能够匹配到数据,那说明什么,说明这个海和你的这个什么海是匹配上的,对吧,这个什么行动的行应该是根据什么银行的行是匹配上的。
06:06
只有这样,我的数据才能够出来。对吧?好,那我们就会有这样的一个猜想,好那么他到底是不是这么去做的呢?我们可以做一个验证,怎么验证呢?那我们就看一下你当前就是这个ES啊ses好默认对这个中文的这个分词,它是怎么去做的。能记得吧,这个怎么查呢啊,我们可以通过这个这个语法去查,你看了啊,通过这个语法。呃,就通过它就可以了啊,这个其实写多了,你不写它也行啊,就直接get,然后呢,后面就查你的分词啊get然后呢,下划线好查分词,这里面写什么呢?就写你的这个text啊,你就把什么呀,把你的这个需要做的分词给他什么写进去,它会告诉你这个是怎么分的。理解吧,来我们查一下,你一查你会发现它其实就是分成了上海银行四个字,那同样的道理,比如说写个什么呀,就是红海行动,对吧,我们分析的啊,你这个红海行动,你纯的时候应该拆分成红海和行动,但实际上呢,他猜的是红海行动四个字。
07:13
然后了吧,那你把这个事情看到以后呢,其实刚刚那个结果你就能理解了,因为这个东西其实他并没有按照我们预想的啊,拆分成红海事件,拆分成湄公河行动,拆分成什么红海行动,而是呢,一个字一个字帮你做了这个拆分,那你既然是一个字一个字拆的,那我这上海银行肯定跟你们能能够匹配。对吧,这个海呢,跟他匹配上了,跟他也匹配上了,这个行呢,诶跟他匹配上了,跟他也匹配上了。那结果不就都出来了吗?对吧,啊,这个结果我们能够分析明白了,但是大家想想啊,这个合适吗?我查个上海银行,你把这个东西给我查出来了,这合适吗。这必然是不合适的。对吧,你这语义都不一样,我查了个上海银行,你给我搞的什么东西啊,搞的都是什么电影名字。不合适吧,同学们啊,所以说啊,对于这个中文分词来讲啊,他ES呢,做了其实不好啊,而且呢,并不是他不想做,他是做不了这个东西,你能明白吧,来说一下啊这个ES。
08:09
这个默认啊,默认中文的分词啊,是按照什么呀字进行拆分啊,就是我就只能是按照一个字一个字帮你去拆,呃,为什么他不能按照这个红海行动帮你去拆呢?因为它。不能够去理解你这个中文的语义。如果说你想正常的把一句话哈,正常的把一句话,然后呢,按照正确的词语把它这个拆出来,那你是一定要去能够理解这个整整句话的这个语义是什么样子的。对吧,你比如说我写个什么上海银行,那你最起码得把它识别成是一个行字,而不是一个行动的行。对吧,中文就是这样子的啊,因为你有多音字是吧,而且你放到你就同一个字,你放到这个不同的这个语义中,它表达的含义也是不一样的,那我到底是给你拆还是不拆呢。是不是啊,说这个事情就很难做啊,对于这个中文分词来讲就很难做,但这个英文你就不用考虑那么多了,英文我就是按照你的一个单词,一个单词一个单词去拆,因为你的每个单词拿出来毕竟是有具体的含义的嘛。
09:12
对吧,我就按照单词去拆就可以了啊,它这个很简单,但对于这个中文来讲,我就不能说按照这个字给你拆了,你两个字放到一起才有含义,如果是一个字单独放在那,其实没有什么含义的。对吧,啊,没有什么含义的啊,所以说呢,它这个ES对这个中文的分词呢,按照默认呢,就是按照什么字进行拆分的,但是呢,必然我们是不满足于这种情况的,我们更希望你能够什么正确的把这个给它拆出来,拆成红淮河行动啊,拆成什么上海银行啊,拆成什么湄公河和行动。对吧,这样才是我们希望的啊,所以说啊,如果我们想正确的对这个中文做这个分词的话呢,你光靠ES就做不到了,这个时候我们得引入一个分词器啊,中文分器啊,我们的引入一个什么中文分词器啊,那我们要给大家介绍的是一个IK分词器啊,它这个分词器的名字就叫IK啊,这个其实我们之前在这个安装ES的时候给大家介绍过啊,嗯,我已经上传上来了啊,可以让你看一下,好就这个东西啊叫。
10:13
呃,IK分子器能记得吧,诶IK分子器啊,呃,这个怎么用呢?啊,我先给大家去用一下,用完以后呢,我再给你去说,呃,它到底是怎么去做的,这个分词吧,好吧,我们来用一下啊,这个怎么用啊。很简单,你把它解压到一个地方,解压到什么地方呢?来解压到这个位置,来到你的ES中,在ES中啊,听好了啊,在ES中我们有一个叫做plugins这个目录,看到了吧,你进来,进来以后呢,它里面默认是什么都没有的,好,那我现在要做的操作是我在它里面make掉一个目录,叫做IK,看到了吧,我在我的plug下面,我创建了一个目叫做IK,然后我来到IK中,好,现在我是在IK里面啊,接下来我做的操作,他把什么呀,把我们的这个。
11:04
Obt烧,就刚刚我让你看的那个分子器啊,然后呢叫嗯,后面是啥来着,提示一下啊,后面是好来就这个东西啊,我要把它,然后呢杠大C解压到我的当前目录下面,然诶它是一个zip啊,Z的话Z呢不能用它。这盘不能用它啊。Zip的话就是on zip了啊,就是我们要它是一个zip包对不对,那我要什么on zip的方式把它解压到我的当前目录,那你要是zip的话呢,就不能用杠C了哈。对吧,它是杠D啊杠DOK,好解压进来了,解压进来以后你看一下啊,在我当前这个IK这个目录下面,我就会有这么多个文件。看到了吧,这就是我这个分词器所要用到的这个资料啊,来我给你强调一下啊,你们在做的时候要注意的东西,看在我们的ES的安装目录下面有一个plug目录,你进来进来以后呢,我是单独创建了一个IK目录的,我把那个整个zip包中的东西呢,完全解压到了IK目录下面。
12:10
听懂了吧,这样的话呢,ES就会认为这是一个完整的一个插件。如果说你直接把IK里面的东西,把这么多东西直接放到这个plug下面,对不起,它是有问题的。好吧,这个事儿我是给你强调过的啊行,那么这样的话呢,你看一下我们来到这个IK中,哎,我们就能够看到它这个当前这个IK分子器的东西啊行,但这个有了以后,有了以后接下来我们就可以去用了啊来去用一下怎么用呢。很简单。你就要在做中文分词的情况下,指定你的分词器了啊,这个怎么指定呢?看一下啊,我们在用的时候啊,当然这个我需要还差点事儿哈。差点事啊呃,分发一下哈,分发一下这个IK啊。
13:03
差点忘了是吧。好给这个三和四发一下,发完以后的话,你这ES呀,你得重启一下哈,把ES重启一下啊,要不不行啊。好把ES重启一下啊,这个可能需要等一会儿啊来,那我们先回到回头去说啊,就是我们假设啊,这个中文分子器已经装好了,装好以后的话呢,我们就可以去测它的分子器了啊,它的分子器呢有两种,一种是叫做I k smart,一种是叫这个叫I k max word啊这两种呢,都能够对你的中文进行这个分词,然后这个IK smart的话,它是什么,按照这个正常的啊方式,然后帮你做分词,然后这个I k max word,从字面意思啊,更多的单词对不对,就它会按照你这个中文的这个语义啊,就是你可以理解为是按照中文的语义,然后呢,给你拆分出来更多的这个词。理解吧啊,他就相当于什么,他猜的会更多一点,他猜的会少一点。
14:03
好吧,哎,行,那怎么指定呢,你看了哈,这里面我们就要去指定一下你的分词器了,就是我再去测试对这个中文的分词的时候呢,我要指定一下你用什么分词器,比如说我用一个叫做I smart。呃,我看一下我这个应该是能够正常访问了吧。能访问到以后,说明我就启动成功了哈。好能访问了,来,那我们就来操作一下啊,你看了啊,就刚刚写的啊,我要去对他这么做查询了,走好你看一下吧,现在的分子就是红海行动。对吧,这个分子就对的了啊行,那当然哈,那如果说我这个用另外一个,比如说我要用什么,用I k max word呀,它是不是猜的更多呀,同学们注意啊,不会他还是红海和行动。诶,那你不是说他会尽可能多去拆吗?但你看这个东西我怎么给你去拆啊,你拆成红海很行动。对吧,这个是正常的语义,那你说我再拆的话,你说我给你拆出单个单个的字吗?这肯定不对的,对吧?好,那你说我给你拆成什么红海型。
15:08
这好像也不是词吧,海行动。这好像也不是一个词吧,对吧,所以这种词它就只能是拆通两个,那如果说我们出现一个别的啊,你比如说我给你测试一下别的,比如说测试一下这个东西。你换一个词,它就有区别了,比如说我举个例子叫我是中国人对吧?我是中国人好,你看啊,如果你用的是X smart,他拆的就是我是中国人。能看到吧,如果你用的是I k max word,他拆的是什么呀?他拆的就更多了啊,他怎么给你拆的,你看了哈,他这么去拆的,我是中国人。中国。国人。对吧,你看这个语义啊,中国人是一个词吧,中国是一个词吧,国人是一个词吧,他为什么尽可能给你什么多猜出来一些,但如果想用的是什么,用的是这个X smart它就什么,按照这个正常的语义就是我是中国人,我就是我是中国人就给你拆完了。
16:07
明白吧,这是两种这个分词器啊,它这个拆分的一个效果啊,OK,行呃,那你已经能够看到这个分词的效果了,对吧,那我们就要去想一想它到底是怎么做的,难道说这个分词器它是能够真正的去理解这个中文的这个语义吗?能理解吗?注意他理解不了,那他怎么做的呢?这个时候他用的就是这个笨办法,啥叫笨办法呢?就是我把。我们目前市面上所有能见到的。中文的词语维护一个清单。我将来去拆的时候,我就拿上这个东西到我的清单里面去比较。明白了吧,只要我的清单中有一个词是出现到你这个整个语义中的,OK,那我就会提取出来,这就是一个拆分的词。啊,所以说你看一下啊,你到你的这个刚刚我们安装好的这个IK里面去看哈,IK里面看这里面包含很多什么,包含很多这个。
17:04
啊,到这个con里面啊,好,你看一下啊,它包含很多什么叫什么DCDCDCD这啥东西啊。这就是你的什么diary,就是你的字典的意思啊,就是你的字典,那比如说我们来一个什么叫做慢啊,这是应该是,呃,这是扩展的一个慢啊,应该看这个吧,对吧,这是慢点diction,就是主字点啊,比如说你这个tell一下啊,我就不看那么多了啊,Tell一下,Tell一下这个叫做慢点DC,你看这啥东西。对吧,啊,大家这个看的比较少啊,那你这看的多一点吧,比如说我们就呃末好吧,末一下这个慢点DC对吧,你看一下吧,从一开始的啊,一直往下走。对吧,所有的这个词它里面都有,就从一开始的啊,能看到吧,一直往后走啊,我就不该不给你挨个看了啊,这这个东西太多太多了啊好然后呢,还有啥呀,还有就是我们的,还有你看还有什么扩展呢。
18:05
对吧,有这个你看一下啊,比如说默一下啊,或者是你要呃,通过什么less吧,都可以看啊这个less啊,Less一下什么X。卖D啊,对吧,这是从什么从这应该是从你的这个英文字母,是不是从什么啊开始的,对不对啊喔啊,不应该叫英文字母,应该从我们的拼音字母对不对啊喔啊啊开始的,你看。对吧,这是阿开始的好吧,说这个东西就是把这个所有的词啊都给你什么记录下来。能明白了吧,哎,都给你记录下来,然后呢,我们就可以。在这个拆中文的时候呢,按照你这个所有的什么词库啊,或者什么字典啊,查字典,然后查出来,诶你是有这个词的好吗?那我就什么给你拆出来。好吧,啊,就给你猜出来了啊行。哼,就有同学们说这个,这是程序员一个一个打进去的吗?呃,肯定不是啊,肯定不是,你这玩意儿,你要一个一个打进去,你得打到猴年马月去啊,肯定不是啊,肯定不是,行,呃,这个不纠结他啊,不管他到底怎么做的,反正我们知道他怎么猜的就完事了啊,OK,这就是我们这个中文的一个分词器啊。
我来说两句