精华内容
下载资源
问答
  • “ 阅读本文大概需要 2 分钟。 ”我们来看一个网页,大家...那么,这段文字是哪里来?我们来看一下这个网页对应 HTML:整个 HTML 里面,甚至连 JavaScript 都没有。那么这段文字是哪里来呢?有点经验同学...

    阅读本文大概需要 2 分钟。

    我们来看一个网页,大家想想使用 XPath 怎么抓取。

    25e12f0582825e523266e438719f1b49.png

    可以看到,在源代码里面没有请抓取我!这段文字。难道这个网页是异步加载?我们现在来看一下网页的请求:

    aa59b3f03558271efba3202cd73a468b.png

    网页也没有发起任何的Ajax 请求。那么,这段文字是从哪里来的?

    我们来看一下这个网页对应的 HTML:

    3d66cf9a2dea6d402e2d14eb8cb725e1.png

    整个 HTML 里面,甚至连 JavaScript 都没有。那么这段文字是哪里来的呢?

    有点经验的同学,可能会想到看一下这个example.css文件,其内容如下:

    1594e68c7a5a4904d3839756db124d8c.png

    没错,文字确实在这里面。其中::after,我们称之为伪元素(Pseudo-element)[1]

    对于伪元素里面的文字,应该如何提取呢?当然,你可以使用正则表达式来提取。不过我们今天不准备讲这个。

    XPath 没有办法提取伪元素,因为 XPath 只能提取 Dom 树中的内容,但是伪元素是不属于 Dom 树的,因此无法提取。要提取伪元素,需要使用 CSS 选择器。

    由于网页的 HTML 与 CSS 是分开的。如果我们使用 requests 或者 Scrapy,只能单独拿到 HTML 和 CSS。单独拿到 HTML 没有任何作用,因为数据根本不在里面。单独拿到 CSS,虽然有数据,但如果不用正则表达式的话,里面的数据拿不出来。所以 BeautifulSoup4的 CSS 选择器也没有什么作用。所以我们需要把 CSS 和 HTML 放到一起来渲染,然后再使用JavaScript 的 CSS 选择器找到需要提取的内容。

    首先我们来看一下,为了提取这个伪元素的值,我们需要下面这段Js 代码:

    window.getComputedStyle(document.querySelector('.fake_element'),':after').getPropertyValue('content')

    其中,ducument.querySelector的第一个参数.fake_element就表示值为fake_elementclass 属性。第二个参数就是伪元素:after。运行效果如下图所示:

    5bb6e0518db2ddeeb32efc2d382a9b62.png

    为了能够运行这段 JavaScript,我们需要使用模拟浏览器,无论是 Selenium 还是 Puppeteer 都可以。这里以 Selenium 为例。

    在 Selenium 要执行 Js,需要使用driver.execute_script()方法,代码如下:

    adfdead84a8fa6392b3cf696518d12b5.png

    提取出来的内容最外层会包上一对双引号,拿到以后移除外侧的双引号,就是我们在网页上看到的内容了。

    参考资料

    [1]

    伪元素(Pseudo-element): https://developer.mozilla.org/zh-CN/docs/Web/CSS/Pseudo-elements

    推荐阅读

    1

    因为"扫一扫"功能,支付宝竟被起诉了!

    2

    5 款最佳最牛代码比较神器

    3

    微信第 1 行代码曝光!

    4

    微软最强 Python 自动化工具开源了!不用写一行代码!

    好文和朋友一起看~
    展开全文
  • 需要用到jar 或 pom 文件 这里提一下 sshxcute.jar 链接:https://pan.baidu.com/s/1sHbXSpAb8qaCYo6K6HJr5w 提取码:uxuj 说明 内容是一个sshexec 文件夹, 文件夹里面有: 1.示例代码: DataImport.java ...

    本篇使用的方式 sshxcute

    需要用到的jar 或 pom 文件
    这里提一下 sshxcute.jar

    链接:https://pan.baidu.com/s/1sHbXSpAb8qaCYo6K6HJr5w 
    提取码:uxuj
    说明 内容是一个sshexec 的文件夹,
    文件夹里面有:
    1.示例代码: DataImport.java
    2.jar包 : sshxucute.jar
    3.maven仓库导入后的jar是一个文件夹 :  sshxcute
    只需把它放到个人仓库的\net\neoremind\目录下就行 repository\net\neoremind
    可以看 下图
    //考虑到直接使用 要引用两个源因此直接把该jar手动导入了个人仓库
    导入个人仓库后记得刷新一下个人仓库(不然不会导入) !!!!!!!
    //导入之后直接在maven中引用就行 ,直接引用应该会报错
    <!-- https://mvnrepository.com/artifact/net.neoremind/sshxcute -->
    		<dependency>
                <groupId>net.neoremind</groupId>
                <artifactId>sshxcute</artifactId>
                <version>1.0</version>
            </dependency>
    

    maven仓库导入后的jar 图片
    在这里插入图片描述
    pom.xml (第二个)
    可以不用我的,只要能进行hdfs API 操作就可以如果用 不用我的pom记得把1添加上

    <!-- https://mvnrepository.com/artifact/net.neoremind/sshxcute -->
    		<dependency>
                <groupId>net.neoremind</groupId>
                <artifactId>sshxcute</artifactId>
                <version>1.0</version>
            </dependency>
    
    	<repositories>
            <repository>
                <id>cloudera</id>
                <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
            </repository>
        </repositories>
    
        <dependencies>
            <!-- https://mvnrepository.com/artifact/net.neoremind/sshxcute -->
            <dependency>
                <groupId>net.neoremind</groupId>
                <artifactId>sshxcute</artifactId>
                <version>1.0</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.apache.Hadoop</groupId>
                <artifactId>Hadoop-client</artifactId>
                <version>2.6.0-mr1-cdh5.14.0</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.apache.Hadoop</groupId>
                <artifactId>Hadoop-common</artifactId>
                <version>2.6.0-cdh5.14.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.Hadoop</groupId>
                <artifactId>Hadoop-hdfs</artifactId>
                <version>2.6.0-cdh5.14.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.apache.Hadoop</groupId>
                <artifactId>Hadoop-mapreduce-client-core</artifactId>
                <version>2.6.0-cdh5.14.0</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>RELEASE</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.0</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <minimizeJar>true</minimizeJar>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    代码如下

    import net.neoremind.sshxcute.core.ConnBean;
    import net.neoremind.sshxcute.core.Result;
    import net.neoremind.sshxcute.core.SSHExec;
    import net.neoremind.sshxcute.exception.TaskExecFailException;
    import net.neoremind.sshxcute.task.impl.ExecCommand;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileStatus;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    /**
     * @version v 1.0
     * @date 2019.12.24
     */
    public class DataImport {
        public static void main(String[] args) throws TaskExecFailException, IOException, URISyntaxException {
        	//获取文件系统使用 hdfsAPI 操作文件系统
            FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.100.100:8020"), new Configuration());
            //获取文件系统目录下的文件
            FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/aaa/project/app_output"));
    
            //设置连接的服务器 ip(如果在hosts文件中配置过只需要用主机名) , 用户名 , 密码
            ConnBean connBean = new ConnBean("hadoop01", "root", "123456");
            //连接服务器
            SSHExec sshExec = SSHExec.getInstance(connBean);
            sshExec.connect();
            //定义一个变量用来保存拼接的命令
            StringBuilder order = new StringBuilder();
            //定义一个只负责用来保存初步添加命令
            String str = "hive -e \"use bigdata_project01;";
            //初步添加命令
            order.append(str);
    
            ExecCommand execCommand = null ;
            for (int i = 0; i < fileStatuses.length; i++) {
                FileStatus fileStatus = fileStatuses[i];
                //获取路径和年月日  获取的path  1970-01-01.txt
                String path = fileStatus.getPath().getName();
                // 1970
                String year = path.substring(0, 4);
                // 01
                String month = path.substring(5, 7);
                // 01
                String day = path.substring(8, 10);
                //拼接
                //   /aaa/project/app_output/ 为 hdfs 文件系统的路径
                // 初始命令为 hive -e "LOAD DATA  INPATH '/aaa/project/app_output/1970-01-01.txt' OVERWRITE INTO TABLE tableName PARTITION (year = '年',month = '月',day = '日');"
                String s = "LOAD DATA  INPATH '/aaa/project/app_output/" + path + "' OVERWRITE INTO TABLE app_traffic PARTITION (year = '" + year + "',month = '" + month + "',day = '" + day + "');";
                order.append(s);
    
                //由于 exec 提交命令的长度 是有限的 因此 字符串每拼接一百次 提交一次 否则长度如果过长会出现索引越界异常
                if (i != 0 && i % 100 == 0){
                    //拼接完毕
                    order.append("\"");
                    //提交命令
                    execCommand = new ExecCommand(order.toString());
                    //执行 如果是此行运行爆数组索引越界异常出 说明 长度还是过大
                    Result exec = sshExec.exec(execCommand);
    
                    //清空  StringBuilder
                    order = new StringBuilder();
                    //重新拼接
                    order.append(str);
                }
            }
    
            //最后一次拼接
            order.append("\"");
            //最后一次提交命令
            execCommand = new ExecCommand(order.toString());
            //执行
            Result exec = sshExec.exec(execCommand);
    
            //关闭文件系统
            fileSystem.close();
            //关闭连接
            sshExec.disconnect();
        }
    }
    

    hive从文件中加载数据到分区表

    1.方法一:shell 脚本 (常用) 其他脚本也可以

    此脚本文件输出路径是:
    /aaa/output_app/year/month/day/year-month-day.txt

    ##!/bin/bash   
    yyyy=`ls /aaa/output_app` #定义遍历的目录
      for yy in $yyyy
        do
          MM=`ls /aaa/output_app/${yy}`
          for  mm in $MM
            do
              DD=`ls/aaa/output_app/${yy}/${mm}`
                for dd in $DD
                  do
                    hive -e "use app_traffic;LOAD DATA LOCAL  INPATH '/aaa/output_app/${yy}/${mm}/${dd}/${yy}-${mm}-${dd}.txt' OVERWRITE INTO TABLE app_traffic PARTITION (year='${yy}',month='${mm}',day='${dd}');"
                  done
            done
        done
    
    2.方法二: 就是本篇博客所述的方法 (常用)
    3.方法三:处理数据的时候直接使用多文件输出,输出到hive中(或者使用mapreduce)

    然后刷新hive就行

    导入格式
    在这里插入图片描述
    提供reduce 端的代码

    package com.czxy.app;
    
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.NullWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Reducer;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    /**
     * @author dell
     * @version v 1.0
     * @date 2019.12.24
     */
    public class AppReducer extends Reducer<Text, Text, Text, NullWritable> {
        private static FileSystem fileSystem;
    
        @Override
        protected void setup(Context context) throws IOException {
            try {
                //获取文件系统对象
                fileSystem = FileSystem.get(new URI("hdfs://192.168.100.100:8020"), context.getConfiguration());
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException {
    //            直接往hive表中导入数据
            String s = key.toString();
            // 1970
            String year = s.substring(0, 4);
            // 01
            String month = s.substring(5, 7);
            // 01
            String day = s.substring(8, 10);
            //创建文件
            FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path("/user/hive/warehouse/bigdata_project01/app_traffic/year=" + year + "/month=" + month + "/day=" + day + "/" + s + ".txt"));
    
            //输出
            for (Text value : values) {
                //往文本中输出
                fsDataOutputStream.write((value.toString() + "\r\n").getBytes());
            }
            fsDataOutputStream.close();
        }
    }
    
    4.方法四

    1.使用hdfsAPI操作遍历文件目录
    2.把所有要执行的代码 使用字符串拼接整合成一个文件
    此文件可以在windows上生成 , 也可以在linux上生成, 还可以在hdfs 上生成
    看个人
    (在linux使用API上生成,这样可以省略上传(下载)的操作)
    3.然后上传(下载)到 linux
    4.使用 hive -f 执行

    最后 : 能力有限,如果有什么问题,或者对代码有疑惑的地方,欢迎给我留言 !!!

    展开全文
  • Oracle E-Business Suite还有一些特性需要DBA去完成,比如外部资源里灌数据到Apps database里,或支持开发人员已有数据中提取数据。 接着工作内容的转变 作为一个Oracle Applications DBA(Oracle应用程序...
  • 可以利用数据库,建立一个中有四列,其中一列专门用于存储Url地址,另外两列分别存放地址对应的线程以及该地址被申请的次数,最后一列存放下载的内容。(当然,对应线程一列不是必要的)。当有线程申请后,将...
  • 所以我想设计一个,将所有数据都变成XML保存在里面,如果需要以它们内容的某一部分为条件检索,可以用全文检索引擎来实现,或者为每个类型的数据建立临时需要的时候导入临时进行处理,平时还都存在一个主...
  • 2)如果链接不固定,也就是链接需要先在某个网页里面获取,则需要设置“获取图形高级设置”区域的内容。该区域的各项设置解释如下:地址:验证码所在的网页的地址。这个地址应该是固定的。来路:有些网站需要检验...

    当我们建立了一个验证码识别工程,接下来我们所要做的就是验证码图像
    下载链接的设置。这要分两种情况。


    1)如果该链接是固定的,那么很简单,把链接填入最上面的那个长条形的
    编辑框即可。如下图所示。

    2)如果链接不固定,也就是链接需要先在某个网页里面获取,则需要设置
    “获取图形高级设置”区域的内容。


    该区域的各项设置解释如下:



    地址:验证码所在的网页的地址。这个地址应该是固定的。
    来路:有些网站需要检验网页的"Referer",也就是这个网页是从哪个网页
    转入的,通常这里可以不填。

    正则表达匹配网址:本软件内部用正则表达式提取验证码地址,这里填写的
    就是所需要的正则表达式。

    匹配结果重新组合:如果用正则表达式获取的结果并非最终结果(通常都不是)
    那么这里可以将结果与其他文本重新组合以得到最终的验证码下载链接地址。



    设置这里的内容需要一些正则表达式的基础。如果你懂得火车头采集器的使用
    方法,相信这对你不会造成困难,如果确实不会呢,你也完全可以自己手动把
    验证码图像下载回来,然后用本软件的“载入一张图片”功能载入,效果是一
    样的。

    数码概念验证码识别系统官方网站 验证码识别 http://www.737168.com/yanzhengma/

     

    展开全文
  •  bootcfg /rebuild 重复全部 Windows 安装过程并允许用户选择要添加的内容。  注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。  bootcfg /scan 扫描用于 Windows 安装的...
  • mysql中文进行全文索引支持问题

    千次阅读 2015-09-07 19:54:11
    先来看看对一个字段做全文索引,作为一个数据库系统需要做哪些工作? 假设一个文章表里面包含几个...数据库系统首先需要从文章内容(这个字段内容)中提取关键词,因为只有提取了关键词,才好建立类似索引目录—类似于新

    MySQL 中的MyISAM存储引擎的特性:


    1. 不支持事务,没有行级锁,当数据库崩溃时,不可以安全恢复
    2. 加锁并发
    3. 当读取某个表的数据时,会给该表加共享锁,写入时会加排他锁,在查询表的数据时可以并发插入新的记录
    4.    索引特性  支持 Text Blog 类型的字段作为索引,基于前500个字符创建,也支持全文索引
    5. 延迟更新索引键   每次修改键索引数据并不会马上写入硬盘上,而是在内存中的键缓冲区,在清理缓存区或关闭表时才写入磁盘中,但是当数据库崩溃时会造成索引的损失,需要执行修复操作
    6. MyISAM压缩表 就是当某个表创建时,并不需要进行修改则可以将表压缩,这样既节省了磁盘空间,又可以减少磁盘I/O 从而提升了查询的性能,压缩表也支持索引,不过也是只读的。

    InnoDB存储引擎特性


    1. 支持事务,支持在线热备份,不需要关闭服务器就能备份
    2. 默认隔离级别为可重复读,使用 MVCC多版本并发控制,提高了并发性
    3. 使用间隙锁来防止幻读,不仅仅涉及到读取的行,还会是用间隙锁防止插入其他数据
    4. 是基于聚族索引建立的数据库,对于主键的查询很高的性能。二级索引(非主键索引)必须包含主键列,若主键列比较大时,其他索引列也会很大,所以主键列尽可能小


    MYISM 支持全文索引:
    给数据库表添加一个MYISAM数据库引擎
    alter table song engine=MYISAM
    alter table song add fulltext index(songname)  
    也可以对多个字段加全文索引
    alter table song add fulltext index(songname,songkind)
    select * from song match(songname) against('zhou')


    MyISAM:特点  设计简单,数据以紧密格式存储,最典型的性能问题是表锁


    先来看看对一个字段做全文索引,作为一个数据库系统需要做哪些工作?

    假设一个文章表里面包含几个字段:文章id、文章作者、文章标题、文章内容

     

    比如,我们对文章内容这个字段artilce_content建立全文索引,这样方便对文章里面的内容使用关键词搜索。

     

    数据库系统首先需要从文章内容(这个字段内容)中提取关键词,因为只有提取了关键词,才好建立类似索引目录—类似于新华字典那样的笔画页码对应关系,当你搜索一个词语”beijing”的时候,就直接去索引中查找,然后就可以定位到数据行的具体位置了,不需要扫描文章表很多行。

     

    这就像,如果我想去新华字典中查找一个汉字,我直接按照笔画或者按照拼音来查找(这个就是新华字典的索引),避免把新华字典从头翻到尾部,这样的效率多低。没错,如果没有索引,数据库系统就是需要这样子遍历扫描整个表才能得到数据的。

     

     

    ps:机器其实是死的,你写的代码让他做什么就做什么。而人有眼睛,可以通过眼睛来看,比如大体翻看一下新华字典,也许眼睛就看到我需要的汉字了呢。

    数据库系统中的关于那个索引结构大体可以这样理解:

     

    关键词  包含此关键词的文档列表(也可以理解成行)

    beijing    1,2,3…

     

    索引就是方便快速查找,根据这个索引结构,搜索的时候就可以快速定位到数据位置了。

     

    mysql对一个字段做全文索引的时候,他从文章内容中提取关键词,

    mysql的全文检索解析器在提取关键词默认是按照空格来识别单词的。也就是中文”我喜欢打篮球” 这一串文字中没有空格,那么mysql不会把这个当成好几个单词的。

    如果故意进行空格分开,mysql就容易识别处理关键词,比如变成”我 喜欢 打 篮球”

     

    像上面这样子,mysql可能会把篮球当成关键词提取出来进入索引中去。为什么只是可能?有空格只是保证mysql识别成单词,但会不会建立成索引,其实我不是很清楚。因为没看过mysql源码,不是很清楚。

     

    因为对文章表的”文章内容”字段建立了成了全文索引,那么每次往表中新加入一行数据,数据库系统都会去提取文章新行数据中的文章内容字段,看有没有关键词,继续往索引表里面加单词或者更新数据。比如原来的索引文件有个单词”beijing”,现在新加入的文章内容中提取到有beijing这个词语,那要更新索引表了,意思是记录下新加的文档哪里存在beijing这个词语。

     

    beijing  8,9,10

    新加入的文档id为20,刚好其中文章内容被提取到了词语beijing

     

    那么索引就要更新成如下形式:

     

    beijing 8,9,20

     

    这样解释是方便理解,理解就好。

    大体是这样子的模式。具体实现会跟这个存在差异的。把复杂的问题解释得通俗化,简单化是而容易理解,是我进行总结的目的。

    ps:mysql的一个表的所有字段的索引数据都在一张一个”表名称.MYI”文件中。

     

    理解了上面的实现原理,

    现在也好理解一句话了,这是从mysql手册中中的一句话:

    对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。

     

    我是这么理解,比如,把100行数据同时插入文章表中,而文章内容字段是建立成全文索引,那么新插入的数据在入库的同时,要提取关键词(对文章内容字段),然后更新索引,速度当然会慢下来。关键问题就是在插入数据的时候就会去分词和更新索引。整个insert 操作就会延长时间了。


     

    上面已经建立文章内容字段为全文索引,现在mysql是怎么进行全文查询的呢?

     

    select  id,title FROM 文章表 WHERE MATCH(article_content) AGAINST ('search keyword')

     

    match()中指定字段名称。表示against()中出现的字符串要去哪个字段中匹配。这里可以指定多个字段

     

    against()中的字符串,难道不是单个词语,mysql会自动对受到的字符串进行分词吗?

     

    AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);

    +号表示,MYSQL这个单词必须出现在每一行的开头位置?

    ‘’里面是单词,多个单词之间需要使用空格分开吗?



    来看看对英文进行分词有什么天然优势

    英文的特点,每个英文单词就是一个词语,单词与单词之间有非常明显的分割符号—空格

     

    比如

    my  name is wangxiaoming

    this city is beijing…..


    citye 和beijing可以看成是两个关键词,用来搜索

     

    mysql内部对要提取关键词的时候,哪些可以作为关键词来建立索引呢?

    它可以以空格来分割开来。把city 和 beijing都当成是两个关键词来建立索引(理解成新华字典中的笔画与页数的目录结构)。

    总结一下

     

    英文:除了少数特殊字符和标点几乎都是以空格分隔的,所以要对一段英文进行分词(也就是从中提取关键词),这样子比较容易。按照空格、逗号等特别的符号来识别即可。

     

    来看看,中文分词为什么就比较麻烦

     

    由于中文比较特殊,像”理发师” 理发可以是一个关键词,理发师也可以是一个关键词。关键词之间并没有明显的分割符号,我们看到紧挨着的。这就需要mysql去提取哪些是关键词。是把”理”发作为关键词来索引,还是”理发”或者”理发师”都算关键词,没法识别。

    一般百度这些搜索引擎是怎么提取关键词,他们有个专门的关键词库的,也就是中文关键词词库。这样就知道把什么当成是关键词。显然,mysql是又国外人做的一个软件,它不会单独给你去做一个关键词库。

     

    计算机怎么知道哪个算是词语呢?比如输入一串文字 ”我来自北京,我很喜欢运动、听音乐…,喜欢听周华健的歌曲”

     

    在这一句话中,北京算不算关键词呢。”周华健”算不算关键词呢?

     

    像我们常见的中文切词,我了解到有几种分词算法:

     

    1、  就是根据词库来进行对比的。

    2、  二元分词法

    3、  统计法

     

    对比:二元分词方法和统计方法是不依赖于词典的,而最大匹配法分词方法是依赖于词典的,词典的内容决定分词结构的好坏。

     

    现在总结一下:MySQL不会断中文字:MySQL内建的字依据是空白、逗号和点来断词语。

     

    mysql手册中原文如下:

    FULLTEXT分析程序会通过寻找某些分隔符来确定单词的起始位置和结束位置,例如' ' (间隔符号)、 , (逗号)以及 . (句号 )。假如单词没有被分隔符分开,(例如在中文里 ),则 FULLTEXT 分析程序不能确定一个词的起始位置和结束位置。为了能够在这样的语言中向FULLTEXT 索引添加单词或其它编入索引的术语,你必须对它们进行预处理,使其被一些诸如"之类的任意分隔符分隔开

    …………………

    诸如汉语和日语这样的表意语言没有自定界符。因此, FULLTEXT分析程序不能确定在这些或其它的这类语言中词的起始和结束的位置。其隐含操作及该问题的一些工作区在12.7节,“全文搜索功能”有详细论述。

     

    ==================================结束

    中文与西方文字如英文的一个重要区别在于,西方文字以单词为单位,单词与单词之间以空格分隔。而中文以字为单位,词由一个或多个字组成,词与词之间没有空格分隔。当试图在一个含有中文字符的字段中使用全文搜索时,不会得到正确的结果,原因在于中文中没有像英文空格那样对词定界,不能以空格作为分割,(于是不方便)对中文词语进行索引。

     

    现在归纳一下,mysql不能很好地支持中文全文索引的解决办法

     

    1、针对对myql全文检索解析器内建机制特点,白痴解决方法是,存中文字时自行塞入空白断字。

    这样就适应了mysql的切词机制了。不过这样子做比较别扭。因为哪有把”我是中国人”古意分开成”我 是 中国人”这样的形式呢。

    显示文章内容的时候就比较别扭,不能显示成”我 是 中国人”给用户看,需要需要自己再次处理。

     

    2、使用切词插件。mysql应该是意识到单靠自己来提供分词,永远无法满足世界上各种各样语言的特殊需求。于是从5.1版本开始,Mysql全文检索的解析器以插件的方式提供。让大家可以以插件的形式挂到mysql下面去(实际上就是作为mysql的一个存储引擎,比如sphinx就是插件挂上去)


    挂载到mysql中的插件所完成是一个什么样的角色呢?

     使用插件,就是可以按照你自己的方式去分词

     

    当数据量很大的时候,比较成熟的做法是使用专门的全文索引系统,用这些专业的全文索引系统来分词,以mysql数据库中的数据作为数据源,来分词建立索引结构。查询的时候,先从全文索引系统中查询,获取文档编号,然后根据文档编号去mysql中查询数据。对于全文搜索插件sphinx-for-chinese,曾经在公司的服务器上配置过,通过那次配置加深了对它的理解。中途遇到一些问题,一直想以文字的形式总结出来,以备忘。有时间会上一篇关于它的操作总结出来。




    展开全文
  • 需要注意是,如果对方使用是IPMSG(飞鸽传书),将无法看到您发送表情符号。在聊天时,可以选择字体按钮设置您所喜欢字体。您还可以点击输入框右上角随手涂鸭按钮,绘制出您想要表达图形,做到图文并茂。 ...
  • 工作日志(一)

    2016-02-02 11:46:26
    具体内容:向各地城市经理发送报表需求调查(表格自定),反馈邮件信息中做提取汇总归类,得出对于报表里面指标及报表频率需求。 任务作用:日后业务开展需要向各地销售经理提供报表,而报表需要按照什么...
  • hadoop中文文档

    2012-03-14 21:35:14
    3.6 Extractor SWF Flash里面提取链接。 3.7 Extractor Universal 最后一个链接提取器,通过提取任何看起来像链接。如果使用话,那么一般把它放在链接提取链最后一个。 3.8 Extractor URI URI 里面提取...
  • 热键修改方法:控制面板→时钟和区域→区域→格式→语言首选项→拼写、键入和盘符设置→高级键盘设置→输入语言热键,选中要设置的输入法,点击更改按键顺序,然后指定自己需要的快捷键。 临时中英切换:左Shift。...
  • JS正则表达式

    2020-05-16 20:40:16
    此外,正则表达式还常用于过滤掉页面内容一些敏感词(替换),或字符串中获取我们想要特定部分(提取)。注意:正则表达式里面需要加引号,不管是数字还是字符串型 1、正则表达式特点 (1)灵活性、逻辑性...
  • 正则通常被用来检索、替换那些符合某个模式(规则)文本,正则表达式还常用于过滤掉页面内容一些敏感词(替换),或字符串中获取我们想要特定部分(提取)等。 创建正则表达式 ----正则表达式里面需要加引号...
  • 快速删除工作空行快速删除空行一次删完Excel里面多出很多空白行 每30行为一页并加上一个标题如何实现如何实现隔行都加上标题项 如何把标签页去掉? 去掉默认表格线(网线)表格框线 列标的标识变了 符号...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    快速删除工作空行快速删除空行一次删完Excel里面多出很多空白行 每30行为一页并加上一个标题如何实现如何实现隔行都加上标题项 如何把标签页去掉? 去掉默认表格线(网线)表格框线 列标的标识变了 符号...
  • 具体demo见example/use_custom_confusion.py,其中./my_custom_confusion.txt的内容格式如下,以空格间隔: iPhone差 iPhoneX 100 张旗康 张旗康 set_custom_confusion_dict方法的path参数为用户自定义混淆集文件...
  • 人们可能还会使用一种具有图形用户界面工具来文本文件中把SQL语句组合起来,甚至根本不需要显示自己实际代码。  接下来阶段是编写新SQL代码,但仍然像使用自己最初熟悉语言那样来操作。这种思维模式...
  • 因为本人仅限于生成自己定制的模版文件,然后自动生成,并非想自动生成整个项目,所以对该项目的部分代码进行了解读,并对需要使用的类提取到自己的项目中,然后对自己需要的定制作了相应的修改,完成了一个自动生成的程序...
  • 进去之后会触发一个页面刷新方法,之后在里面填写寄存产品信息 其中,会员信息和产品信息都是数据库中查询出来,可以进行自动赋值,还有寄存单号是自动生成随机数,之后金额value也是在后台自动计算出来...
  • 飞秋2013专业版

    2014-06-24 10:54:48
    需要注意是,如果对方使用是IPMSG(飞鸽传书),将无法看到您发送表情符号。在聊天时,可以选择字体按钮设置您所喜欢字体。您还可以点击输入框右上角随手涂鸭按钮,绘制出您想要表达图形,做到图文并茂。 ...
  • 采用了最新数据扫描引擎,以只读方式磁盘底层读出原始扇区数据,经过高级数据分析算法,扫描后把丢失目录和文件在内存中重新建立出原先分区和原先目录结构,数据恢复效果非常好。另外本恢复软件还...

空空如也

空空如也

1 2 3 4
收藏数 74
精华内容 29
关键字:

从表里面提取需要的内容