130242014073+张顺程+第3次实验

一、实验目的

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

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

二、实验环境

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

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

三、实验内容

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

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

四、实验步骤:

本例采用管道-过滤器风格实现

1、体系结构图:

2、写出主要的代码

package com.zsc.kwic;

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

public class KWIC {

public static void main(String[] args) throws IOException {

// 文件源

String fileName = "test.txt";

// 获取上下文

List<String> sourceList = KWIC.getListFormFile(fileName);

// 循环

List<String> kwicList = KWIC.loop(sourceList);

// 按字母表排序

KWIC.sortList(kwicList);

// 输入结果

KWIC.display(kwicList);

}

/**

* 获取文件内容并存入list

*

* @author zsc

* create 2017年11月19日/update 2017年11月19日

* @param fileName

* @return

* @throws IOException

*/

public static List<String> getListFormFile(String fileName) throws IOException {

List<String> list = null;

BufferedReader br = null;

/* 读取数据 */

try {

list = new ArrayList<>();

br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "utf-8"));

String lineTxt = "";

System.out.println("===============输入=================");

// 逐行读取文件

while ((lineTxt = br.readLine()) != null) {

System.out.println(lineTxt);

list.add(lineTxt);

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

} finally {

try {

br.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return list;

}

/**

* 循环移动内容并返回排序后的集合

*

* @author zsc

* create 2017年11月19日/update 2017年11月19日

* @param list

* @return

*/

public static List<String> loop(List<String> list) {

List<String> kwicList = new ArrayList<String>();

for (int i = 0; i < list.size(); i++) {

// 分割单词

List<String> words = Arrays.asList(list.get(i).split("\\s+"));

for (int j = 0; j < words.size(); j++) {

// 循环移动

Collections.rotate(words, 1);

kwicList.add(KWIC.listToString(words));

}

}

return kwicList;

}

/**

* list集合解析为指定格式字符串

*

* @author zsc

* create 2017年11月19日/update 2017年11月19日

* @return

*/

public static String listToString(List<String> list) {

StringBuffer sb = new StringBuffer();

for (String string : list) {

sb.append(string + " ");

}

// 去除最后一个空格并返回

return sb.toString().trim();

}

/**

* 按字母表排序

*

* @author zsc

* create 2017年11月19日/update 2017年11月19日

* @param list

*/

public static void sortList(List<String> list) {

// 按字母表排序

Collections.sort(list);

}

/**

* 显示结果

*

* @author zsc

* create 2017年11月19日/update 2017年11月19日

* @param list

*/

public static void display(List<String> list) {

System.out.println("===============输出=================");

for (String string : list) {

System.out.println(string);

}

}

}

4、显示结果:

五、实验总结

比较简单没啥问题。

作业博客要求:

标题:是学号+姓名+第3次实验

时间: 2024-11-13 09:05:15

130242014073+张顺程+第3次实验的相关文章

130242014073-张顺程-实验一

实验报告 课程    软件体系结构     实验名称  实验一.软件设计的网络支持环境              第      页 专业____   软件工程___________  班级___  2班______  学号___   130242014073____ ____   姓名      张顺程 实验日期:   2017 年 9  月  14 日   报告退发 (订正 . 重做) 一.实验目的 (1)复习软件工程的重要概念,熟悉软件体系结构与软件设计技术的基本概念与内容. (2)通过因特

实验:添加AXI IP到设计

需要实现的系统是这样的: 1.PL一侧的ASI GPIO只有一位的宽度,用于连接到BTNU按键(在我的zc702上,我选择连接到SW13). 说明:PS和PL里面都有GPIO的模块,添加和配置的方法以及在程序里调用的方法,都是不太相同的. 2.PS部分的GPIO有1位的接口,通过EMIO连接到PL的引脚.并且先接到板上的BTNR按键(zc702上的SW5按键) 说明:上一个开关是在PL部分的管脚进入到PL部分的AXI GPIO模块,在通过PL部分的AXI互联模块,和PS部分的GP AXI主端口进

Python实现基于协程的异步爬虫

一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python 之父 Guido van Rossum.项目代码使用 MIT 协议,项目文档使用 http://creativecommons.org/licenses/by/3.0/legalcode 协议. 课程内容在原文档基础上做了稍许修改,增加了部分原理介绍,步骤的拆解分析及源代码注释. 2. 内容简介 传统计算机

caffe扩展实验

caffe实现caltech101图像分类 这里讲述如何用自己的数据集,在caffe平台一步步实现的过程[新手参考]; 主要分为下面3个环节: 数据集准备 Dataset preparation caffe网络准备 Caffe network files preparation 从零开始训练和微调 From scratch training and finetuning 复制imagenet项目到MyNet,修改内容完成caltech101数据集分类网络 数据集准备: caltech101(加利

1006实验一实验报告

实验一报告 实验一.DOS命令解释程序的编写 13物联网工程  张学玲  201306104140 一. 实验目的 (1)认识DOS: (2)掌握命令解释程序的原理: (3)掌握简单的DOS调用方法: (4)掌握C语言编程初步. 二. 实验内容和要求 编写类似于DOS,UNIX的命令行解释程序 (1)自行定义系统提示符 (2)自定义命令集(8-10个) (3)用户输入HELP以查找命令的帮助 (4)列出命令的功能,区分内部还是外部命令 (5)用户输入QUIT退出 (6)内部命令有dir, cd,

软件工程结对作业实验报告

题目简介: 设计一个名为MyPoint的类,表示一个带x坐标和y坐标的点.该类包括:? 两个带get方法的数据域x和y,分别表示它们的坐标.? 一个创建点(0,0)的无参构造方法.? 一个创建特定坐标点的构造方法.? 两个数据域x和y各自的get方法.? 一个名为distance的方法,返回MyPoint类型的两个点之间的距离.? 一个名为distance的方法,返回指定x和y坐标的两个点之间的距离. 二.结对分工及过程 : 结对:张萍萍,程志张萍萍:程序的分析和程序的测试及测试代码的编写程志:

1203 实验三 进程调度模拟实验

实验三 进程调度模拟实验 物联网工程   张学玲  201306104140 一.        实验目的        用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二.        实验内容和要求 实验内容 完成两个算法(简单时间片轮转法.多级反馈队列调度算法)的设计.编码和调试工作,完成实验报告. 1) 每个进程有一个进程控制块(PCB)表示.进程控制块包含如下信息:进程名.优先级.到达时间.需要运行时间.已用CPU时间.进程状态等等. 2) 每个进程的状态可

20145306张文锦 网络欺诈技术防范

20145306张文锦 网络欺诈技术防范 实验过程 1.使用工具建立钓鱼网站 主机的ip地址为: 查看主机80端口的使用情况 ,找到其对应的pid,kill进程.  修改apache配置文件监听端口为80 新建终端进入setoolkit:选择社会工程学模块->网页攻击->. 选定ip地址为kali ip. xuan v (2) 2. DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为,它并不是真的"黑掉"了对方的网站,而是冒名顶替.招摇撞骗罢了. DNS欺骗攻击是很难防御的,

20182303 2019-2020-1 《数据结构与面向对象程序设计》实验2报告

目录 实验内容 实验过程及结果 实验过程中遇到的问题和解决过程 其他 参考资料 课程:<程序设计与数据结构> 班级: 1823 姓名: 张端云 学号:20182303 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 实验内容 编写简单的计算器,完成加减乘除模运算. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. 编写测试代码,测试验证.(https://www.cnblogs.com/rocedu/p/4472