Java 实现文章汉字关键词(违禁词)识别2.0

说明:2.0相对1.0的算法改进

首先1.0是用父子节点树来保存树的,一个父对应多个子节点,这就不可避免要使用List来保存子节点,由于List的大小有限制,在1.0的时候加载的数据小于10万条,没有出现List溢出问题。
所以2.0放弃使用父子节点的树,在数据结构上使用了兄弟节点树,也放弃使用List树解决了List溢出问题同时效率与空间的利用提升了一个等级

1.面向应用
最近公司新开发的电商平台,要实现一些违禁词过滤。需求很简单,就是从数据库中读取内容,包括资讯,产品,公司简介之类,看看是否存在违禁词,有的话就把这条记录的ID存入违禁词文档。可以应用于分词库匹配检索,如关键字、敏感词的标识,起到过滤的作用。
2.设计思想
采用了哈希表与树相结合的思想,哈希表中放的是关键词的首字符相同和以该首字符开始的树根节点。
这里写图片描述
3.方案的优缺点
首先使用了树来保存违禁词,节省了前缀相同汉字的内存空间,以HashMap作为索引提高了匹配的效率。继承了HashMap的快速定位优点,在以树的形式保存关键字,比HashMap节省空间。又因为不同汉字开头的是不同的小树,小树的查询效率比所有的节点挂载在大树上的效率有更大的提高。
4.模拟效果图
这里写图片描述

节点类
TreeBrother .Class

package HashTree;

import java.io.Serializable;

public class TreeNode implements Serializable {
   
    private int isLast;                 //是否是关键字结束节点
    private String nodeName;            //节点名
    private TreeNode parentNode;        //父节点
    private TreeNode brotherNode;       //兄弟节点
    private TreeNode childNode;         //子节点
    public int getIsLast() {
  return isLast;}

    public void setIsLast(int isLast) {
  this.isLast = isLast;}

    public String getNodeName() {
  return nodeName;}

    public void setNodeName(String nodeName) {
  this.nodeName = nodeName;}

    public TreeNode getParentNode() {
  return parentNode;}

    public void setParentNode(TreeNode parentNode) {
  this.parentNode = parentNode;}

    public TreeNode getBrotherNode() {
  return brotherNode;}

    public void setBrotherNode(TreeNode brotherNode) {
  this.brotherNode = brotherNode;}

    public TreeNode getChildNode() {
  return childNode;}

    public void setChildNode(TreeNode childNode) {
  this.childNode = childNode;}
}

树的操作类
TreeHelper.Class

package HashTree;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

import java.io.*;
import java.util.*;

/**
 * Created by Administrator on 2016/3/22.
 *
 * @version $Revision$ $Date$
 *          2016/3/22
 *          14:09
 * @author: Administrator
 * @since 3.0
 */
public class TreeBrother {
   
    private  Boolean isExit;            //是否存在违禁词
    private  int maxLength;             //记录树的最大长度
    private  int index;                 //最大匹配位置
    private  Map<String, TreeNode> map;  //树根索引
    private  List<String> indexList;    //记录关键词的位置
    private  List<String> valueList;    //记录关键词
    private  int wordCount;             //违禁词总数
    private  int articleLength;

    public static void main(String[] args) throws IOException {
        TreeBrother treeBrother = new TreeBrother();
        //加载树
        Long loadStartTime = new Date().getTime();
        treeBrother.readXlsBuildTree("F:\\words1.xls");
        treeBrother.readXlsBuildTree(1, 1,2,"F:\\words2.xls");
        treeBrother.readXlsBuildTree(1, 1,2,"F:\\words3.xls");
        treeBrother.readFileBuildTree("F:\\lex-main.lex");
        Long loadEndTime = new Date().getTime();
        //读取文章
        String str = treeBrother.readTxt("F:\\hello.txt");
        //查找树
        Long searchStartTime = new Date().getTime();
        treeBrother.findWordLocation(str);
        Long searchEndTime = new Date().getTime();
        //显示树的信息
        treeBrother.showInfo(loadEndTime-loadStartTime,searchEndTime-searchStartTime);
    }

    public</
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 违禁数据库是一种可以用于敏感过滤和管理的数据库系统。它的主要功能是对网站或应用程序中存在的敏感进行管理和处理,以保障网站或应用程序的安全性和合法性。 MySQL 违禁数据库可以很方便地实现敏感的动态管理,当新的敏感出现时,可以很容易地加入到数据库中,并立即生效。同时,它也可以实现敏感的分类和别名管理,不同类型的敏感可以进行不同的处理,让管理更加精细。 MySQL 违禁数据库还能够实现快速的敏感过滤,它可以应用在登录、注册和评论等场景中,对用户的输入内容进行敏感过滤,以避免不良信息的传播。 总之,MySQL 违禁数据库是一种非常实用、方便且高效的数据库系统,它可以有效地管理和过滤敏感,保障网站或应用程序的安全性和合法性,使用户的访问体验更加安全和愉快。 ### 回答2: MySQL违禁数据库指的是一个用于存储违禁汇的数据库,通常用于过滤和检查用户提交的文本内容是否包含敏感不良汇。对于一些互联网应用,如社交媒体、在线游戏、论坛等,保障用户体验和内容安全是至关重要的。因此,在设计这些应用时,必须设置相应的规则来限制或过滤用户提交的内容。而MySQL违禁数据库就是解决这个问题的一种方式。 具体来说,当用户提交文本内容时,系统会将其与数据库中的违禁进行匹配。如果匹配成功,则会拒绝该内容的提交或给出相应提示。而如果未匹配成功,则会允许该内容的提交。此外,开发人员也可以根据实际需要,自行添加或修改违禁库中的汇。 MySQL违禁数据库的建立需要首先确定违禁汇库的范围和标准,以确保数据库的准确性和高效性。同时,随着社会环境和法律法规的不断变化,数据库中的违禁库也需要及时更新和调整。此外,需要注意的是,MySQL违禁数据库只是一种辅助手段,最终的内容审核还需依赖人工审核和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值