`

Word查询1

阅读更多

// word_dict.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <assert.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <string>
#include <vector>

typedef struct
{
	size_t uLineNo;
	size_t uWordSeq;
} term_index_t;

#if defined(_WIN32)
#include <Windows.h>
#include <hash_map>

using namespace std;
using namespace stdext;

typedef hash_map< string, vector<term_index_t> > map_term_index;

#if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_)
struct timeval
{
	long tv_sec;
	long tv_usec;
};
#endif

int gettimeofday(struct timeval *tv, void *tzp)
{
	time_t clock;
	struct tm tm;
	SYSTEMTIME wtm;

	GetLocalTime(&wtm);
	tm.tm_year = wtm.wYear - 1900;
	tm.tm_mon  = wtm.wMonth - 1;
	tm.tm_mday = wtm.wDay;
	tm.tm_hour = wtm.wHour;
	tm.tm_min  = wtm.wMinute;
	tm.tm_sec  = wtm.wSecond;
	tm.tm_isdst= -1;
	clock = mktime(&tm);
	tv->tv_sec = (long)clock;
	tv->tv_usec = wtm.wMilliseconds * 1000;

	return 0;
}
#else
#include <sys/time.h>
#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;

struct str_hash
{
	size_t operator()(const string &str) const
	{
		return __stl_hash_string(str.c_str());
	}
};

typedef hash_map<string, vector<term_index_t>, str_hash> map_term_index;

#endif

map_term_index g_term_index;

size_t time_stat(bool bBegin = true)
{
	static struct timeval st_time_begin, st_time_end;
	static char szInfo[128];

	if (bBegin)
	{
		gettimeofday(&st_time_begin, NULL);
		return 0;
	}
	else
	{
		gettimeofday(&st_time_end, NULL);
		return (st_time_end.tv_sec - st_time_begin.tv_sec) * 1000
			+ (st_time_end.tv_usec - st_time_begin.tv_usec) / 1000;
	}
}

void Str_Lower(char *pStr)
{
	assert(pStr);

	while (*pStr)
	{
		*pStr++ = tolower(*pStr);
	}
}

// 返回true表示还未读完,否则表示读完
bool GetWord(const char *pBuffer, string &strWord, size_t &uCurPos)
{
	assert(pBuffer);

	strWord = "";

	// 跳过前面的空白以及标点符号等
	for (;;)
	{
		if (!pBuffer[uCurPos])
		{
			return false;
		}
		else if (isalnum(pBuffer[uCurPos]))
		{
			break;
		}
		uCurPos++;
	}

	// 读取单词
	for (;;)
	{
		if (!pBuffer[uCurPos])
		{
			return false;
		}
		else if (isalnum(pBuffer[uCurPos]))
		{
			strWord.append(1, tolower(pBuffer[uCurPos]));
		}
		else
		{
			break;
		}
		uCurPos++;
	}

	return true;
}

int CreateRevIndex(const char *pInFile)
{
	assert(pInFile);

	FILE *pFp = fopen(pInFile, "r");
	if (!pFp)
	{
		printf("Open file:%s failed!\n", pInFile);
		return -1;
	}

	char szInBuffer[4096];
	bool bProcEnd;
	string strWord;
	size_t uProcPos, uLineNo = 0, uWordSeq;
	term_index_t word_index;
	while (fgets(szInBuffer, sizeof(szInBuffer), pFp))
	{
		uProcPos = 0;
		bProcEnd = false;
		uLineNo++;
		uWordSeq = 0;
		while (!bProcEnd)
		{
			bProcEnd = !GetWord(szInBuffer, strWord, uProcPos);
			if (0 == strWord.size())
			{
				continue;
			}
			uWordSeq++;

			word_index.uLineNo = uLineNo;
			word_index.uWordSeq= uWordSeq;

			g_term_index[strWord.c_str()].push_back(word_index);
		}
	}
	fclose(pFp);

	return 0;
}

int main(int argc, char *argv[])
{
	const char *pInFile = "kjv.txt";
	if (argc > 1)
	{
		pInFile = argv[1];
	}

	size_t uInteval = 0;
	time_stat(true);
	if (0 != CreateRevIndex(pInFile))
	{
		printf("Call CreateRevIndex failed!\n");
		return -2;
	}
	uInteval = time_stat(false);
	printf("construct search use: %ums\n", uInteval);

	char szBuffer[512];
	string strOutInfo;
	while (true)
	{
		printf("Please Enter word which you want to search:");
		scanf("%s", szBuffer);
		Str_Lower(szBuffer);

		if (!strncmp("exit", szBuffer, 5))
		{
			printf("exit..., good bye!\n");
			break;
		}
		printf("The word you search is : %s\nSearch result: ", szBuffer);
		time_stat(true);
		map_term_index::iterator iter
			= g_term_index.find(szBuffer);
		if (g_term_index.end() == iter)
		{
			uInteval = time_stat(false);
			printf("Not found!\n");
		}
		else
		{
			strOutInfo = "";
			for (vector<term_index_t>::iterator it = iter->second.begin()
				; it != iter->second.end(); ++it)
			{
				::_snprintf(szBuffer, sizeof(szBuffer), "{%u,%u},", it->uLineNo, it->uWordSeq);
				// printf("{%u,%u},", it->uLineNo, it->uWordSeq);
				strOutInfo += szBuffer;
			}
			uInteval = time_stat(false);
			printf("%s\nTotal num is: %u\n", strOutInfo.c_str(), iter->second.size());
		}
		printf("This search use: %ums\n", uInteval);
	}

	return 0;
}
 
分享到:
评论

相关推荐

    Delphi调用Word显示查询结果.rar

    这个程序演示了使用Word作为自动化服务器,Delphi地自动化控制器是如何将一个查询结果插入到word文档中。返回应用参数.这个调用在英文和法文版的 Word中相同。,对德文版的Word,这个过程名是翻译后的。如果这个过程...

    word安装包资源 officeword

    可以通过搜索引擎查询该链接的评价或者咨询专业人士的意见来判断其可靠性。 - **病毒扫描**:下载完成后,建议使用杀毒软件进行全面扫描,确保安装包未被篡改或植入恶意代码。 - **版权问题**:非官方渠道提供的Word...

    根据word模板导出word、PDF文档

    本功能是将各个模板的数据均查询并导出为word后,将word转换成PDF格式,并将word合并成一个整体word,对整体word进行转换成PDF 本资源中集成了 根据word模板导出word功能 、合并多个word功能 、word转换成pdf功能 、...

    在pb中调用word来编辑保存在数据库中的word文件.rar_PB 调用 word_jetr5n_pb word_pb数据库_

    1. **ActiveX控件和OLE自动化**:PowerBuilder支持通过OLE(Object Linking and Embedding)自动化技术来调用其他应用程序,如Word。OLE允许PB应用作为宿主,控制Word对象模型,实现对Word的远程操作。首先,需要在...

    学生成绩信息查询 word文档

    本文将基于给定的“学生成绩信息查询 word文档”标题和描述,详细探讨C# 2005环境下如何设计并实现一个学生信息管理系统,包括其界面设计、程序结构和可能的操作流程。 一、学生信息管理系统界面设计: 在C# 2005中...

    js word 插件的范例

    JavaScript Word 插件是一种在网页端处理文档的强大工具,它允许用户在浏览器环境中创建、编辑和操作Microsoft Word文档。在现代Web应用中,这种技术尤其适用于在线协作、文档分享和远程工作场景。以下是对这个“js ...

    thinkphp生成word文档并导出

    1. **数据准备**:从数据库中获取需要展示在Word文档中的内容。这可能涉及到SQL查询,以及对查询结果的处理,如格式化数据、拼接字符串等。 2. **创建Word对象**:在`Wordmaker.class.php`中,可能会使用第三方库,...

    POI使用word模板文件循环输出行并导出word

    1. **读取模板文件**:使用`XWPFDocument`类打开模板文件。模板文件通常包含固定的文本和占位符,这些占位符将在循环中被替换。 2. **获取表格**:在Word文档中找到你需要循环填充的表格。这可以通过`XWPFDocument`...

    GenerateWord_Sqilte数据库文件生成Word文档_生成word_sqlite_

    6. 循环与迭代:如果要将多个SQLite数据库文件的内容合并到一张Word报表上,那么程序需要有处理多个文件的能力,这通常通过循环结构实现,遍历文件列表,对每个文件执行相同的查询和生成文档的操作。 7. 错误处理:...

    css实现Word样式

    1. **布局与网格系统**:Word界面通常有多个面板和工具栏,我们可以使用CSS3的Flexbox或Grid布局来创建这种复杂的布局。通过定义容器的display属性为flex或grid,我们可以灵活地控制子元素的排列方式。 2. **颜色和...

    php导出word文档(支持样式导出)

    例如,我们可以创建一个DOMDocument实例,加载HTML文件,然后通过DOMXpath查询元素和属性: ```php $doc = new DOMDocument(); $doc-&gt;loadHTMLFile('your_html_file.html'); $xpath = new DOMXpath($doc); ``` 接...

    PHPWord中文手册.rar

    结合PHP的数组或数据库查询结果,开发者可以将动态数据绑定到文档的各个部分,实现内容的自动化填充,从而生成个性化的文档。 总而言之,PHPWord中文手册是PHP开发者处理Word文档的宝贵资源,它涵盖了从基础操作到...

    读word实现编辑转存新word,excel

    适用于读取带有table信息的word大型文档, 下载者需要进行自定义的后续开发,适配自己的文档格式。 读取word依赖于DocX.dll, 导出excel依赖于Spire.XLS.dll 数据库操作依赖MySql.Data.dll,MySql.Data....9.支持查询

    delphi操作word实例

    1. 首先,需要添加 WordXP 单元到 Delphi 项目中,以便使用 Word 的对象模型。 2. 然后,需要实例化 WordApplication 对象,以便控制 Word 应用程序。 3. 接下来,需要加载 Word 文档模板,并将其设置为活动文档。 4...

    Word2Vec java版实现

    1. **Word2Vec的核心概念** - **连续词袋模型(CBOW)**:CBOW是Word2Vec的一种方法,它通过上下文单词来预测目标单词。模型会计算上下文单词的平均向量,然后这个向量通过一个多层感知机(MLP)预测目标单词。 - ...

    数据库导出WORD工具!

    这意味着用户可以通过该工具连接到MySQL数据库,选择要导出的数据表或查询结果,然后将这些数据导出为Word文档,方便进行报告编写、数据分析或者共享给不熟悉数据库的人。 数据库导出工具通常具备以下特点和功能: ...

    表结构导出为Word

    通过将MySQL的表结构导出为Word文档,用户可以清晰地看到表的字段名、数据类型、主键、外键等信息,这对于设计数据库模型、编写SQL查询或与非技术人员沟通数据库设计非常有用。 2. **MS SQL Server**:Microsoft ...

    ireport导出pdf和word文档实例

    1. **安装与配置iReport**: - 下载并安装`iReport`软件,根据操作系统选择相应的版本。 - 配置JDBC驱动,以便连接数据库获取数据。这通常需要将JDBC驱动库添加到`iReport`的类路径中。 2. **设计报表模板**: -...

    java XML解析方式实现自动生成word文档

    1. 引入Apache POI库:在项目中添加Apache POI依赖,通常是通过Maven或Gradle的配置完成。 2. 创建Word文档对象:使用`XWPFDocument`类创建一个新的Word文档实例。 ```java XWPFDocument document = new ...

    通过数据库生成Word文档

    在IT领域,数据库和文档处理是两个非常关键的方面,特别是在数据管理和报告生成...利用MySQL的查询功能和iText的文档生成能力,我们可以创建出结构清晰、信息丰富的Word文档,这对于数据分析、报告编写等工作非常有用。

Global site tag (gtag.js) - Google Analytics