瑞星推国内唯一Linux系统杀毒软件 国产操作系统还需国产安全软件保护

下面是基于KWIC 的关键字匹配算法(管道+过滤器模式下实现)

关键部分的管道+过滤器 软件体系下的实现, 在很多的关键字搜索平台都使用了这一 循环移位+排序输出的 关键字匹配算法:

具体需求如下:

1、使用管道-过滤器风格:

每个过滤器处理数据,然后将结果送至下一个过滤器,。要有数据传入,过滤器即开始工作。过滤器之间的数据共享被严格限制在管道传输

四个过滤器:

输入(Input filter):

从数据源读取输入文件,解析格式,将行写入输出管道

移位(CircularShifter filter):循环移位

排序(Alphabetizer filter):

输出(Output filter)

管道:

in_cs pipe

cs_al pipe

al_ou pile

例如:

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace KWIC
{
    /// <summary>
    /// 管道类
    /// </summary>
    public class Pipe
    {
      List<string> word;
      public List<string> read()
        {
            return word;
        }
      public void write(List<string> word)
        { this.word = word; }
    }

    /// <summary>
    /// 管道之间的过滤器接口
    /// </summary>
    public abstract class Filter
    {

        public virtual void Transform()
        { }
    }

    /// <summary>
    /// 继承并实现实现管道接口
    /// </summary>
    public class InputFilter : Filter
    {

        public Pipe outPipe;
        public List<string> word;
        public InputFilter(List<string> word, Pipe outPipe)
        {
            this.word = word;
            this.outPipe = outPipe;
        }
        public void Transform()
        {
            outPipe.write(word);
        }
    }

    /// <summary>
    /// 继承并实现过滤器接口
    /// </summary>
    public class CircleShiftFilter : Filter
    {
        public Pipe inputPipe;
        public Pipe outPipe;
        public CircleShiftFilter(Pipe inputPipe, Pipe outPipe)
        {
            this.inputPipe = inputPipe;
            this.outPipe = outPipe;
        }
        /// <summary>
        /// 关键的循环移位函数
        /// </summary>
        public virtual void Transform()
        {
            List<string> word = inputPipe.read();

            /////////////////////////////////////////////// 补充代码,将WORD数组中字符串循环移位////////////////////////////////////////////////////////

            List<string> turned_words = new List<string>();

            // 获得每一行字符串数据
            foreach (string line in word)
            {
                // 拆分一句话
                string[] words = line.Split(' ');

                // 获取单词数
                ulong word_number = (ulong)words.LongLength;

                // 临时存储中间排序好的串
                List<string> tmp_words = new List<string>();

                tmp_words.Clear();

                tmp_words.Add(line);

                string tmp_line = "";

                for (ulong i = 0; i < word_number - 1; i++)
                {
                    // 获取上一行串
                    tmp_line = tmp_words[tmp_words.Count - 1];

                    // 获取上一行串的最后一个单词
                    string last_word = tmp_line.Split(' ')[word_number -1];

                    // 获取上一行串的除了最后一个单词之外的所有单词
                    string left_words = tmp_line.Substring(0, (tmp_line.Length -last_word.Length-1 ));

                    tmp_words.Add(last_word +" "+ left_words );
                }

                // 移除原有的串
                tmp_words.RemoveAt(0);

                // 将一句移位的串加到临时的list集合
                turned_words.AddRange(tmp_words);

            }

            // 将所有移位的串加到原来list集合
            word.AddRange(turned_words);

            /////////////////////////////////////
            outPipe.write(word); 

        }
    }

    /// <summary>
    /// 实现的排序过滤器类
    /// </summary>
    public class AlphaFilter : Filter
    {
        public Pipe inputPipe;
        public Pipe outPipe;
        public AlphaFilter(Pipe inputPipe, Pipe outPipe)
        {
            this.inputPipe = inputPipe;
            this.outPipe = outPipe;
        }

        /// <summary>
        /// 排序输出函数
        /// </summary>
        public void Transform()
        {
            List<string> word = inputPipe.read();

            ////////////////////////////////////// 补充代码,将word数组中单词排序输出/////////////////////////////////////////////////
            word.Sort();

            outPipe.write(word); 

        }
    }

    /// <summary>
    /// 实现输出过滤器接口类
    /// </summary>
    public class OutputFilter : Filter
    {
        public Pipe inputPipe;
        public Pipe outPipe;
        public OutputFilter(Pipe inputPipe, Pipe outPipe)
        {
            this.inputPipe = inputPipe; this.outPipe = outPipe;

        }
        public  void Transform()
        {
            List<string> word = inputPipe.read();
            outPipe.write(word);
        }
    }

    /// <summary>
    /// 程序的整体运行框架
    /// </summary>
    public class KWIC_System
    {

        Pipe in_cs; // create three objects of Pipe
        Pipe cs_al; // and one object of type
        Pipe al_ou; // FileInputStream
        Pipe ou_ui; // FileInputStream
        InputFilter inputFilter;
        CircleShiftFilter shifter;
        AlphaFilter alpha;
        OutputFilter output; // output to screen
      public   KWIC_System()
        {
            in_cs = new Pipe(); // create three objects of Pipe
            cs_al = new Pipe(); // and one object of type
            al_ou = new Pipe(); // FileInputStream
            ou_ui = new Pipe(); // FileInputStream

            List<string> word = new List<string>();
	    word.Add(Regex.Replace("I love you".Trim(), @"\s+", " ")); //正则会获取到所有类型的空格(比如制表符,新行等等),然后将其替换为一个空格
            word.Add(Regex.Replace("me too".Trim(), @"\s+", " "));
            word.Add(Regex.Replace("do you know".Trim(), @"\s+", " "));  

            inputFilter = new InputFilter(word, in_cs);
            shifter = new CircleShiftFilter(in_cs, cs_al);
            alpha = new AlphaFilter(cs_al, al_ou);
            output = new OutputFilter(al_ou,ou_ui); // output to screen
        }
        public List<string > GetResult()
        {
            inputFilter.Transform();
            shifter.Transform();
            alpha.Transform();
            output.Transform();

            return ou_ui.read();
        }

    }

}

(备注:如果想换行这里想换行输出,需要在结尾输出的每一行结尾加‘\r\n’)

在广泛的搜索技术中,其实这个关键字匹配算法应用范围很广,比如我们常见的Baidu和Google的搜索关键字 提示功能。



瑞星推国内唯一Linux系统杀毒软件 国产操作系统还需国产安全软件保护

时间: 2024-12-09 13:15:47

瑞星推国内唯一Linux系统杀毒软件 国产操作系统还需国产安全软件保护的相关文章

linux 系统中多重操作系统引导管理器grub学习

注:以下学习均在X86架构的CPU下搭建完成的linux系统. 一.linux系统启动流程简介 POST开机自检-->加载BIOS-->读取MBR-->启动Boot Loader/Grub程序-->加载内核-->用户层init依据inittab文件来设定运行等级-->init进程执行rc.sysinit-->启动内核模块-->执行不同运行级别的脚本程序-->执行/etc/rc.d/rc.local-->执行/bin/login程序,进入登录状态

搭建PXE服务器,推送安装linux系统

搭建环境: 推送服务器: Ip:192.168.189.138 系统:CentOS 5.8 推送系统:RHEL 5.4 1:配置dhcpd服务. 如果没有安装dhcpd服务,请安装: # yum -y install dhcp.x86_64 # vi /etc/dhcpd.conf option domain-name "766.com";  default-lease-time 6000;   max-lease-time 11400;   authourtative;   next

操作系统变天 国产系统春天能否到来?

国内互联网市场出现"冰火两重天"现象,一边是以电商.智能手机.搜索引擎.社交应用等为代表的"国产集团军"占据绝对上风,另一边却是以国产操作系统.国产应用软件为代表的"国产派"处于边缘化状态.一冷一热的两极表现,让国内互联网市场呈现"一条腿"走路的非正常状态.不过,近来的消息却使得国产操作系统有望在未来的时间中"咸鱼翻身". 虽然是凭借政策的大手在调控,不过国产操作系统接下来的发展势头已经可以看到.还能够引起

Linux 系统编程

总结一些Linux 系统编程相关的东西,因为Linux 系统编程涉及操作系统但又不需要深入内核(内核代码是个庞大的工程),通过系统接口可以管中窥豹:同时系统编程是程序设计中的基础问题,很多架构问题,跟系统息息相关:学习系统编程能够提高基础理解能力. 主要想着从以下几个方面来总结: 1)man学习 2)程序员修养 3)计算机基础 4)APUE 5)网络编程 6)TCP/IP 原文地址:https://www.cnblogs.com/xiaoliurenjia/p/9581678.html

Linux 系统运行级别(SysVinit 系统)

个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268个人微信公众号(点击查看详情) -- https://blog.51cto.com/11495268/2401194     1.简介     systemctl 基础操作 学习中,接触 系统运行级别 之间的 切换,本文 描述 SysVinit 系统运行级别 基本概念 # lsb_release -a No LSB modules are available. Distributor ID: Ubu

倪光南预言的10月国产操作系统没出现,高层却下指示,国产系统春天来了

威智网10月27日消息,根据业内消息报道称,国家政府部门即将大规模采购国产操作系统.这一传闻源起于中国工程院院士倪光南向上递交的关于"必须用国产操作系统替代微软"的报告.目前,政府"最高层"已经对此做出了长达 400 字的批示,表示出了高度的重视. 据相关报道指出,一位行业人士日前向媒体透露,在政府高层批示之后,中央已经发出内部指令,要求各部委按照计划,每年以一定比例购置国产操作系统,以此来逐步替换掉微软 Windows 操作系统.据悉,这一计划比例将达到 15%.

Linux系统安全需要注意的一些问题

写在前面:当你部署一台服务器,第一步不应该是部署应用,安全是才是首要任务 如果某一天当你登录服务器发现 /bin/bash –i,python -c 'import pty; pty.spawn("/bin/sh")' 等命令在服务器上出现的时候,那么恭喜你,服务器被入侵了 但是入侵者都是很聪明的,首先会执行以下命令 unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null;

初学Linux系统最应该做对的4件事情[长文]

"闲来无事,逛逛贴吧"已经是本人无事消磨时间的最佳选择了.五花八门的问题,各式各样的回答,总能给自己带来无限的欢乐.当然也有些问题值得自己去思考或者回答.之前就有人在贴吧里问到"Linux好难啊!该怎么学习呢?"针对此问题本人谈谈个人的想法: 一. 熟悉掌握Linux系统中必须的命令 如果把学习Linux比作是建造一座高楼的话,那Linux命令就是构建这个大楼的必备材料.所谓的命令,是我们在命令行输入的一串字符.shell负责理解并执行这些字符串.shell命令可以

Linux -- 系统病毒防治

一.Linux病毒的历史 1996年出现的Staog是Linux系统下的第一个病毒,它出自澳大利亚一个叫VLAD的组织.Staog病毒是用汇编语言编写,专门感染二进制文件,并通过三种方式去尝试得到root权限.Staog病毒并不会对系统有什么实质性的损坏,它应该算是一个演示版,但它向世人揭示了Linux可能被病毒感染的潜在危险.Linux系统上第二个被发现的病毒是Bliss病毒,它是一个不小心被释放出来的实验性病毒.与其它病毒不同的是,Bliss本身带有免疫程序,只要在运行该程序时加上"disi