“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统尝试

一、实验目的

1.理解不同体系结构风格的具体内涵。

2.学习体系结构风格的具体实践。

二、实验环境

硬件: (依据具体情况填写)

软件:Java或任何一种自己熟悉的语言

三、实验内容

“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合;每一个单词又是字母的有序集合。通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被“循环地移动”。KWIC检索系统以字母表的顺序输出一个所有行循环移动的列表。

尝试用不同的策略实现这个系统。选择2-3种体系结构风格来实现。

四、实验步骤:

要求写具体实现代码,并根据实际程序,画出程序的总体体系结构图和算法结构图,以及运行结果截图。

①采用主/子程序的风格

 a.体系结构图

b.简述体系结构各部件的主要功能,实现思想。

文本输入:通过命令行提示输入文本

循环移位:把输入的文本进行循环位移

输出位移过程:将位移的每个过程结果输出

排序:对移位后的结果进行排序

输出:输出排序后的结果

c.代码:

<?php
//定义全局共享变量
$data = [];
$all = [];
$index = 0;
$yield = null;
/**
*
* 行输入
*
**/
 function input()
 {
    global $data;
    while(1){
        $string = trim(fgets(STDIN));
        //按ctrl+p 结束输入
        if(16 === ord($string)){
            break;
        }
        array_push($data,$string);
    }
    return;
 }
 /**
 *
 *    记录位移过程,累加到到迭代器
 *
 **/
 function shifter()
{
    global $data;
    global $index;
    while($index<count($data)){
        $tempArr = explode(‘ ‘,$data[$index]);
        $count = count($tempArr);
        yield implode(‘ ‘,$tempArr)."\n";
        for($i=0;$i<$count-1;++$i){
            $shift = array_shift($tempArr);
            array_push($tempArr,$shift);
            yield implode(‘ ‘,$tempArr)."\n";
        }
        $index+=1;
    }
}
/**
*
*    位移过程输出
*
**/
function pcOutput()
{
    global $yield;
    $collector = [];
    foreach($yield as $k=>$v){
        array_push($collector,$v);
        echo $v;
    }
    return $collector;
}
/**
*
* 按字母排序
*
**/
 function alphabetizer()
{
    //使用全局变量
    global $all;
    //排序
    return natcasesort($all);

}
/**
*
* 排序结果输出
*
**/
function output()
{
    global $all;
    foreach($all as $v)
    {
        print($v);
    }
}

/**
*
* 主函数
*
**/
function main()
{
    global $yield;
    global $all;
    print("----------input---------\n");
    //输入
    input();
    //循环位移
    $yield = shifter();
    //过程输出
    print("\n---------process--------\n");
    $all = pcOutput();
    //按字母表排序
    alphabetizer();
    //排序结果输出
    print("\n----------output---------\n");
    output();
}

main();

?>

 d.结果

采用管道过滤器的风格

a.体系结构图

b.简述体系结构各部件的主要功能,实现思想

文本输入:通过命令行提示输入文本,并经过输入过滤器,转换成字符数组

循环移位:把,转换成的字符数组,通过循环移位过滤器,生成移位过程行文本

排序:对移位后的结果进行排序

输出:输出排序后的结果

c.代码

  1 <?php
  2 /**
  3 *
  4 *    过滤器
  5 *
  6 **/
  7     abstract class Filter{
  8         protected abstract function trans();
  9     }
 10 /**
 11 *
 12 *
 13 *    管道类
 14 *
 15 **/
 16     class Pipe{
 17         private $inputPipe = [];
 18         private $outputPipe = [];
 19         private function writeLine(){
 20             $input = new Input();
 21             print("--------input---------\n");
 22             while(1){
 23                 $buffer = $input->input();
 24                 if($buffer === false)
 25                     break;
 26                 array_push($this->inputPipe,$buffer);
 27             }
 28             return $this->inputPipe;
 29         }
 30         private function readLine(){
 31             $CircleShift = new CircleShift($this->inputPipe);
 32             $outputPipe  = $CircleShift->trans();
 33             $Alpha = new Alphabetizer($outputPipe);
 34             $outputPipe = $Alpha->trans();
 35             return $outputPipe;
 36         }
 37         public function start(){
 38             return $this->writeLine();
 39         }
 40         public function stop(){
 41             $this->outputPipe = $this->readLine();
 42             $output = new Output($this->outputPipe);
 43             $output->trans();
 44         }
 45     }
 46
 47     /**
 48     *
 49     *    输入,并将输入过滤生成数组
 50     *
 51     **/
 52     class Input extends Filter{
 53         private $input = ‘‘;
 54         public function input(){
 55             $this->input = trim(fgets(STDIN));
 56             if(ord($this->input) === 16){
 57                 return false;
 58             }
 59             return $this->trans();
 60         }
 61
 62         public function trans(){
 63             return explode(‘ ‘,$this->input);
 64         }
 65     }
 66     /**
 67     *
 68     *    输出
 69     *
 70     **/
 71     class Output extends Filter{
 72         private $output = null;
 73         function __construct($output){
 74             $this->output = $output;
 75         }
 76         function trans(){
 77             foreach($this->output as $k=>$v){
 78                 print($v);
 79             }
 80         }
 81     }
 82     /**
 83     *
 84     *    循环移位
 85     *
 86     **/
 87     class CircleShift extends Filter{
 88         private $input = null;
 89         private $output = [];
 90         private $index = 0;
 91         function __construct($input){
 92             $this->input = $input;
 93         }
 94         //循环移动单词的位置
 95         public function trans(){
 96
 97             foreach($this->input as $value){
 98                 $count = count($value);
 99                 array_push($this->output,implode(‘ ‘,$value)."\n");
100                 for($i=0;$i<$count-1;++$i){
101                     $shift = array_shift($value);
102                     array_push($value,$shift);
103                     array_push($this->output,implode(‘ ‘,$value)."\n");
104                 }
105             }
106
107             return $this->output;
108         }
109     }
110     /**
111     *
112     *    按照字母排序
113     *
114     **/
115     class Alphabetizer extends Filter{
116         private $data = null;
117         function __construct($data){
118             $this->data = $data;
119         }
120         public function trans(){
121             natcasesort($this->data);
122             return $this->data;
123         }
124     }
125     class KWIC{
126         public function main(){
127             //实例化管道
128             $Pipe = new Pipe();
129             $input = $Pipe->start();
130             $output = $Pipe->stop();
131         }
132     }
133
134     $kwic = new KWIC();
135     $kwic->main();
136 ?>

d.结果

时间: 2024-10-07 22:52:45

“上下文关键字”KWIC(Key Word in Context,文本中的关键字)检索系统尝试的相关文章

3 中文文本中的关键字提取

前言 关键词提取就是从文本里面把跟这篇文章意义最相关的一些词语抽取出来.这个可以追溯到文献检索初期,关键词是为了文献标引工作,从报告.论文中选取出来用以表示全文主题内容信息的单词或术语,在现在的报告和论文中,我们依然可以看到关键词这一项.因此,关键词在文献检索.自动文摘.文本聚类/分类等方面有着重要的应用,它不仅是进行这些工作不可或缺的基础和前提,也是互联网上信息建库的一项重要工作. 关键词抽取从方法来说主要有两种: 第一种是关键词分配:就是给定一个已有的关键词库,对于新来的文档从该词库里面匹配

从文本中提取关键字

就在前几天的任务中用到了从文本描述中提取关键字的操作,特意从网上找到了一些提取关键字的方法. 总结如下:需要引入jieba这个库文件 基于TF-IDF算法进行关键词提取 import jieba.analyse sentence = "人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的一门新的技术科学.人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反

Android中高亮变色显示文本中的关键字

应该是好久没有写有关技术类的文章了,前天还有人在群里问我,说群主很长时间没有分享干货了,今天分享一篇Android中TextView在大段的文字内容中如何让关键字高亮变色的文章 ,希望对大家有所帮助,我终于在歪路上回归正途了.这个篇文章在平时应该还算比较常用吧,如果你会了,就不用看了,如果还不会,可以看一眼,非常简单. 今天分享的文章大概内容是在TextView中如何使大段的文字内容中关键字变色高亮显示的,分为一个关键字高亮变色显示和多个关键字一起高亮变色显示.我已经封装成了KeywordUti

二、spark入门之spark shell:文本中发现5个最常用的word

scala> val textFile = sc.textFile("/Users/admin/spark-1.5.1-bin-hadoop2.4/README.md") scala> val topWord = textFile.flatMap(_.split(" ")).filter(!_.isEmpty).map((_,1)).reduceByKey(_+_).map{case (word,count) =>(count,word)}.sor

[转载]java获取word里面的文本

需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格.图片等信息. 方案分析 方案一:使用Apache POI技术将所有服务器上文档的文本获取后存储到数据库,查找文档时利用sql语句检索数据中存储的文档文本是否包含关键字来搜索到相关文档.然而现在 microsoft word 有两种文档格式doc和docx,这两个版本存储数据的格式上都有相当大的差别.

对文本内容进行关键字过滤(正则过滤)

<!--html部分--> <!doctype html> <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="demo.js"></script> <title></title> </head><body> 字数限制: &

通过QT查找Word中的关键字,并做高亮或删除操作

最近由于项目需要,要用QT操作Word文档.具体的工作需求:在指定的Word文档(*.doc文件/*.docx文件)中查找关键字,找到后做高亮操作或者直接删除操作,然后另存为到别的目录(表示这个文件被操作过了). 这个功能很简单,确实挺简单,但由于是第一次用QT操作Word文档,所以仍需要经过一番查找资料.网上用QT操作Word文档的资料不是很多(可能是我没找对地方),所以经过了一段时间的碰壁之后(没有现成的,哪怕是半成品),我决定还是从源头看起: 1.查看帮助文档:Microsoft Word

使用hadoop统计多个文本中每个单词数目

程序源码 import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.had

Jave中如何将输入的信息写入文本中

要把信息写入文本中进行固化存储是开发中经常用到的一种方法,下面是具体的操作流程,(文中只涉及核心代码,不是完整的项目). try{ File file = new File("mnt/sdcard/newfile.txt");   //先New出一个文件来 FileOutputStream fos = new FileOutputStream(file); //然后再New出一个文件输出流, String content = name+":"+pwd;