C/C++ 编程代写
当前位置:以往案例 > >CS案例之C语言案例 信息管理案例数据库靠谱的一个案例
2018-04-27



1简介


你被哈基特聘为工程师–这家声名狼藉的武汉 it 创业公司最近获得了他们的 b 轮融资。hackit 正在开发一个新的搜索引擎, 他们希望将其纳入信息管理和数据挖掘产品。特别是, hakit 的项目侧重于搜索财经新闻文章以获取相关信息。该产品将引起金融分析师、投资银行家和记者的兴趣。您被分配到工程团队, 该团队应该构建核心搜索技术的第一个原型。搜索引擎开发的设计尚处于起步阶段, 但 hackit 的技术部门已经概述了其基本功能 (请参阅算法1中的伪代码)。您的任务是实现基本的核心算法, 并使用高级功能对其进行扩展。


您的任务包括:


·核心搜索引擎的实施

搜索引擎是 hackit 的关键任务核心技术。提供数百万并发用户搜索需要高性能快速的程序执行。hackit 的 cto dom 博士要求您在普通 c 中实现整个项目, 而无需依赖第三方库。

·增强核心搜索引擎与先进的搜索功能

为了将 hackit 的搜索技术作为高科技进行营销, 您需要扩展具有高级功能的核心算法。

·测试

为了确保高质量的服务, 您可以使用基准集测试算法是否按预期工作。


2数据


hackit 数据团队为您的搜索引擎准备了一个测试数据集, 您可以在存档中下载这些数据集, 这些数据集形成了他们的开发服务器:

http://chinabigdatatraining.com/dataset/dataset.zip. 数据是hackit 属性, 它拥有对它的所有权利, 但授予您将其用于实现搜索引擎的特权。hackit 不允许您错误地使用或分发他们的数据。


数据采集团队成员注意到文档 id 由文档名称 (不包括文档扩展) 决定。


例如:

文档 xx.txt→文档 id: 文档 xx


此外, 他还指出, 每个文档的开头都包含与您的任务无关的 EDNA 代码。每个文档的内容在内容关键字之后开始。


例如:

1546954330462720.png


图 1: 示例文档。搜索引擎应该只考虑内容标记后的术语 (由绿线框), 并忽略之前的任何内容, 包括内容标记 (由红线框架)


3术语定义


手头的任务要求您实现信息检索系统。因此, 您将接触到一般信息检索、数据挖掘和投标数据应用程序的研究领域的术语。以下部分介绍了解所需的常用术语。


·搜索引擎

在与用户指定的关键字或字符相对应的数据集中搜索和识别信息的程序。商业网站的一个例子是谷歌或百度, 它们专注于搜索万维网上的特定网站。


·查询

搜索引擎用户输入的一组搜索关键字。查询表达了搜索引擎用户的信息需求。例如, 用户可能对有关特定手机的产品发布的信息感兴趣。他或她的搜索查询可能如下所示: "iphone 2019 的发布日期"


·查询条款

组成查询的搜索词。示例查询 "iphone 2019 的发布日期" 由5个查询术语组成, 这些术语共同构成了搜索查询, 并表达了搜索引擎用户的信息需求。


·脚本

计算机脚本是由特定程序或脚本引擎执行的命令的列表。


·文件 id

文档的唯一标识器, 即: 准确描述1个文档的数字或术语。


·查询 id

查询的唯一标识符, 即: 准确描述1个查询的数字或术语。


·错误

软件错误是计算机程序或系统中的错误、操作、故障或故障, 导致其产生不正确或意外的结果, 或以意外的方式运行。


4任务


您是 hackit 的软件工程师, 负责实现他们的搜索引擎。执行搜索引擎时, 应要求用户使用命令行参数指定 "搜索模式"。用户应该能够从两种模式中进行选择:


·手动引导搜索手动引导搜索

(命令行关键字 "手册") 允许用户手动 (手动) 在搜索引擎中键入查询词。提交搜索字词 (输入按下的键) 后, 搜索引擎应将所有文档 id 打印到至少一个查询字词匹配的屏幕上。


·脚本引导式搜索

脚本引导搜索 (命令行键字 "脚本") 允许用户在与搜索引擎相同的文件位置创建名为 "query. txt" 的查询。查询文件包含由查询 id 标识的搜索查询 (每行 1个)。


示例查询. txt:

q1 house mouse

q2 star car bar


在本例中, q1 和 q2 是查询1和查询2的查询 id。查询 1 (q1) 由2个查询术语 (house and mouse) 组成, 而查询2由3个查询术语 (star car bar) 组成


执行以下步骤:

. 1 获取数据集

创建一个名为 "搜索引擎" 的新工作目录并下载数据集。打开工作目录中的存档并手动检查文件。请注意文档的哪一部分与您的搜索引擎相关, 如数据部分所述。

. 2 创建源文件 (1分)

创建一个名为 search xxxx. c (xxx 应替换为您的学生 id) 的源代码文件。源代码文件包含搜索引擎的整个代码。

.3 实现核心搜索引擎算法(40分)

实现其他两种搜索模式手册和脚本的核心搜索引擎。 应使用选项“manual”或“script”将搜索模式指定为命令行参数。 算法1说明了核心搜索引擎的伪代码。


算法1 伪代码搜索引擎

image.png



. 4修正核心搜索引擎算法 (14分)

在为搜索引擎创建伪代码时, hackit 的工程师犯了一个错误, 因为他们的算法版本为与文档术语匹配的每个查询术语打印文档 id。当然, 这是一个错误, 是不能接受的。您需要确保每个文档 id 只打印一次以进行筛选, 而不考虑与之匹配的查询术语的数量。


.5 高级搜索引擎 i-精确搜索 (15分)

通过实现精确的搜索功能作为命令行选项 "精确搜索" 来扩展核心搜索引擎。此功能应适用于两种搜索模式 (手动和脚本), 并与所有其他高级搜索功能兼容。如果搜索引擎使用 "精确搜索" 命令行参数执行, 则只打印那些与所有查询术语匹配的文档以进行筛选。

例如:

d1{a,b,c}

d2{a,g,d}

d3{a,b,f,d}

d4{a,b,b,r,f}

d5{g,r,d}


q1{a,b,f}


使用查询 q1 搜索文档 d1-d5 时, 应打印以下3个结果:

q1 d4

q1 d3

q1 d1


请注意, 这里的文档顺序并不重要。前3个文档由查询和文档之间的重叠决定:

d4& q1 = 4 的重叠;d3& q1 = 3;d1& q1 = 2;d2& q1 = 1;d5& q1 = 0;


5基准测试


hackit 为其工程师提供了一组基准查询及其相应的正确搜索结果。您可以从他们的开发服务器下载此基准集: http://chinabigdatatraining.com/dataset/testset.zip。在实现搜索引擎时, 您可以在数据集和基准集提供的测试查询上运行它, 并比较结果。


6输出格式


本节定义脚本搜索模式所需的输出格式。重要的是, 搜索引擎的脚本模式应正确遵循输出格式, 以确保您的算法可以被评估。每当核心算法在脚本模式下处理特定查询并将包含一个或多个查询术语的文档 nds 时, 都需要将以下行打印到屏幕上:

查询 id 文档 id

每个查询/文档 id 对都应在自己的行中, 并由一个空格 (空白) 分隔。手动模式的输出格式由您决定, 而不是由 hackit 进一步指定。


7提交


数字提交:

为了评估你的表现, 你需要提交你的源代码 le (不是可执行的)。评估结果基于算法的正确实现和结果。可能的点数总数为 100, 分布在搜索引擎的各个功能中 (如第3节所述)。hackit 的技术部门将通过自动测试来评估您的搜索引擎, 这需要您密切关注源代码 lename 的正确命名以及所有命令行参数和输出格式。完全按照本文档中所述的方式命名所有功能。


注: 如果您不能满足确切的命名约定, 自动评估脚本将失败, 您的提交结果将为负。


哈克将在下周之前通过微信集团发布提交系统。我们将为您提供一个在线提交系统的链接, 包括您的用户名和密码。您需要在课程结束前使用提供的提交链接以及您的用户名和密码提交源代码的数字版本。


物理提交:

除了源代码的数字提交外, 您还需要在课程结束前提交实验室报告的物理 (打印) 版本。


hackit 技术部门负责人 dom 博士祝你好运、玩的开心和设计成功!:)

已有文件,这些文件的内容作为数据来源,建立一个简单的搜索引擎。

·手动引导搜索手动引导搜索

(命令行关键字 "手册") 允许用户手动 (手动) 在搜索引擎中键入查询词。提交搜索字词 (输入按下的键) 后, 搜索引擎应将所有文档 id 打印到至少一个查询字词匹配的屏幕上。


·脚本引导式搜索

脚本引导搜索 (命令行键字 "脚本") 允许用户在与搜索引擎相同的文件位置创建名为 "query. txt" 的查询。查询文件包含由查询 id 标识的搜索查询 (每行 1个)。

示例查询. txt:

q1 house mouse

q2 star car bar


在本例中, q1 和 q2 是查询1和查询2的查询 id。查询 1 (q1) 由2个查询术语 (house and mouse) 组成, 而查询2由3个查询术语 (star car bar) 组成


First step:read files

we only use fileID and keyword

Set a struct for every document

Struct myfile

{int wanted=0

Char*ID

Char**keywords

/*The general format at the beginning of the file content like

” 3 elliot

2 amazon

18 beer

1 renovating

<>” does not need to be read, read only all the words after it and store them as keywords.*/

}myfile【510】

Use all of structs set a myfile*dataset.

Second step:user input

Scanf char*//two or three words


Third step:core algorithm

Char**user keyword

For each keywords that in user searches

/*use loop read all files,break after finish*/

{

For  each keywords in files

If b contains a

B->wanted+=1/*Mark file if it contains keyword*/

}

Out put

Delete mark after out put

#include
#include
#include
struct myfile
{
int wanted;
char* fileid;
char** infile;
}myfile[510];
int main()
{
int a=0;
for( a = 0;a<510;a++) { int name[510]; int b=0; name[a]=a+1; char* sid; b=(a+1)/10; if (b<1) { itoa(name,sid,10); char* nmm="00"; strcat(nmm,sid); sid=nmm; } else if (1<=b<10) { itoa(name,sid,10); char* nmn="0"; strcat(nmn,sid); sid=nmn; } else if (b>=10)
{
itoa(name,sid,10);
}
strcpy(myfile[a].fileid,sid);
}
}

在线提交订单