`

Word查询2

阅读更多

#pragma once
#include <map>
#include <string>
#include <Windows.h>
using namespace std;

typedef map<string, string>	MAP_WORD;

class CPraseWord
{
public:
	CPraseWord(void);
	~CPraseWord(void);

public:
	BOOL ParseWord(const char* lpszFile);
	BOOL GetWordInfo(const char* lpszWord, string& strInfo);

private:
	MAP_WORD* GetMap(const char ch);
	BOOL AddToMap(const char* lpszStr, const int nLine, const int nWord);

private:
	MAP_WORD	m_mapWord[27];
};


#include "stdafx.h"
#include "PraseWord.h"
#include "macro.h"

#define MAX_WORD_LEN 100

CPraseWord::CPraseWord(void)
{
}

CPraseWord::~CPraseWord(void)
{
}

BOOL CPraseWord::ParseWord(const char* lpszFile)
{
	ASSERT_RETURN(lpszFile, FALSE);

	FILE* fp = fopen(lpszFile, "r");

	int nWord = 1;
	int nLine = 1;
	char ch = '\0';
	BOOL bLastSp = FALSE;
	int nCharPos = 0;

	char szWord[MAX_WORD_LEN] = {0};

	while ( EOF != (ch = fgetc(fp)) )
	{
		switch (ch)
		{
		case '\n':
			nLine++;
			nWord = 1;
			bLastSp = FALSE;
			nCharPos = 0;

			AddToMap(szWord, nLine, nWord);

			break;

		case ' ':
		case '\r':
		case ',':
		case ':':
		case '#':
		case '!':
		case '+':
		case '-':
		case '*':
		case '&':
		case '(':
		case ')':
		case '@':
		case '$':
			bLastSp = TRUE;
			nCharPos = 0;

			AddToMap(szWord, nLine, nWord);
			
			break;

		default:
            if (bLastSp)
			{
				nWord++;
				nCharPos = 0;
				memset(szWord, 0, sizeof(szWord));
			}

			szWord[nCharPos++] = ch;

			bLastSp = FALSE;
			
			break;
		}		
	}

	if (NULL != fp)
	{
		fclose(fp);
		fp = NULL;
	}	

	return TRUE;
}

BOOL CPraseWord::AddToMap(const char* lpszStr, const int nLine, const int nWord)
{
	ASSERT_RETURN(lpszStr, FALSE);

	MAP_WORD* pMap = GetMap(lpszStr[0]);	

	if (NULL == pMap)
	{
		return FALSE;
	}

	char szPlace[100] = {0};
	::_snprintf(szPlace, sizeof(szPlace), "{%d, %d}", nLine, nWord);

	MAP_WORD::iterator it = pMap->find(lpszStr);

	if (pMap->end() == it)
	{
		(*pMap)[lpszStr] = szPlace;
	}
	else
	{
		it->second += ",";
		it->second += szPlace;
	}

	return TRUE;
}

BOOL CPraseWord::GetWordInfo(const char* lpszWord, string& strInfo)
{
	ASSERT_RETURN(lpszWord, FALSE);

	MAP_WORD* pMap = GetMap(lpszWord[0]);

	if (NULL == pMap)
	{
		return FALSE;
	}

	MAP_WORD::iterator it = pMap->find(lpszWord);

	if (pMap->end() == it)
	{
		return FALSE;
	}

	strInfo = it->second;
	return TRUE;
}

MAP_WORD* CPraseWord::GetMap(const char ch)
{
	int nSub = ch - 'a';

	if ( (nSub >= 0) && (nSub < 26) )
	{
		return &m_mapWord[nSub];
	}

	nSub = ch - 'A';

	if ( (nSub >= 0) && (nSub < 26) )
	{
		return &m_mapWord[nSub];
	}

	if (0 == ch)
	{
		return NULL;
	}

	return &m_mapWord[26];
}



// w_m.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "PraseWord.h"
#include <iostream>
#include <string>
#include <Windows.h>
#include <time.h>
using namespace std;

size_t time_stat(bool bBegin = true);

int main(int argc, char* argv[])
{
	CPraseWord pd;
	char* lpszFile = "./kjv.txt";

	if (argc >= 2)
	{
		lpszFile = argv[1];
	}

	//DWORD dwStart = GetTickCount();

	time_stat(true);
	if (!pd.ParseWord(lpszFile))
	{
		cout << "prase file failed..." << endl;
		return -1;
	}
	
	cout << "parase file cost time:" << time_stat(false) << endl;
	

	//DWORD dwEnd = GetTickCount();
	//cout << "parase file cost time:" << dwEnd - dwStart << endl;

	while (TRUE)
	{
		char szWord[100] = {0};
		cout << "please input find parse word:";
		cin >> szWord;

		string str;
		//dwStart = GetTickCount();
		time_stat(true);

		pd.GetWordInfo(szWord, str);
		//cout << "search cost time:" << time_stat(false) << endl;
		size_t nCostTime = time_stat(false);
		
		//dwEnd = GetTickCount();
		//cout << "search cost time:" << dwEnd - dwStart << endl;

		if (str.empty())
		{
			cout << "can't find " << szWord << endl;
		}
		else
		{
			cout << str << endl;
		}
		
		cout << endl << endl;
		cout << "search cost time:" << nCostTime << endl;
		cout << "search total cost time:" << time_stat(false) << endl;
		//dwEnd = GetTickCount();
		//cout << "search total cost time:" << dwEnd - dwStart << endl;
	}

	return 0;
}

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;
}


size_t time_stat(bool bBegin)
{
	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;
	}
}
 
分享到:
评论

相关推荐

    Word2Vec java版实现

    - 在`Word2VEC_java-master`项目中,开发者通常会找到一个示例代码,演示如何加载数据、配置模型参数、训练模型以及使用模型进行预测或相似性查询。 7. **注意事项** - 训练大型数据集可能需要大量计算资源,因此...

    word安装包资源 officeword

    - **第三方平台**:虽然存在一些非官方的第三方网站提供Word安装包下载链接(如标题中提到的“http://pan.baidu.swj%2ewang”),但这类来源的安全性和合法性难以保证,可能存在病毒或恶意软件的风险。 ##### 2. ...

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

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

    Python-word2vec使用word2vec改进搜索结果

    在实际应用中,我们可能还需要对搜索查询进行预处理,使其与训练数据格式一致,再用word2vec模型计算查询与候选结果的相似度,按照相似度排序返回搜索结果。 此外,为了优化模型性能和节省存储空间,还可以使用`...

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

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

    Word2Vec-master_java_word2vec_meanssn7_

    Word2Vec是一种流行的自然语言处理(NLP)技术,它由Google的研究人员在2013年提出。这个模型主要用于将词语转化为连续的、低维度的向量表示,这些向量能够捕捉到词汇间的语义关系。在"Word2Vec-master_java_word2...

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

    3. **文件操作**:PB需要知道如何从数据库中获取Word文档的路径,这通常涉及到SQL查询来检索文件的存储位置。一旦获取到文件路径,PB可以使用Word的`Open`方法打开文档,`ActiveDocument`属性可以访问当前活动的文档...

    DataBase2Word.zip

    标题“DataBase2Word.zip”指的是一个压缩包文件,其中包含了将数据库数据转换为Word文档的工具或脚本。这个工具可能特别适用于需要定期从数据库(如MySQL或Oracle)提取信息并整理成Word报告的场景。从描述来看,...

    学生成绩信息查询 word文档

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

    Go-Word2VecGloVeinGolang

    - 加载预训练模型:库允许用户加载已经训练好的Word2Vec或GloVe模型,用于对新的单词进行嵌入或进行相似性查询。 - 自定义训练:用户也可以使用自己的语料库训练模型,调整参数如窗口大小、嵌入维度、迭代次数等。 -...

    js word 插件的范例

    2. **编辑文档**:提供文本格式化、段落调整、字体大小和颜色选择等功能,类似于Word软件中的编辑工具栏。 3. **插入内容**:支持插入图片、链接、表格、页眉和页脚等元素,丰富文档内容。 4. **保存和同步**:自动...

    word2vec词向量训练及中文文本相似度计算

    **word2vec词向量训练** word2vec是一种基于神经网络的无监督学习方法,用于从大规模文本数据中学习词的分布式表示。这种方法由Tomas Mikolov等人在2013年提出,分为CBOW(Continuous Bag of Words)和Skip-gram两...

    thinkphp生成word文档并导出

    2. **创建Word对象**:在`Wordmaker.class.php`中,可能会使用第三方库,如PHPWord,它是一个PHP库,能够方便地创建Microsoft Word .docx文件。你需要实例化这个类,然后创建一个新的Word文档对象。 3. **添加内容*...

    word2vec C语言版 以及 使用文档

    **正文** 《word2vec C语言版及其使用详解》 word2vec,这款由Google开发的工具,是自然语言处理领域的重要...结合“Word2vec使用说明.pdf”,我们可以更系统地学习和运用word2vec,从而在实际项目中发挥其强大功能。

    Word2VEC_java-master

    Word2VEC_java-master 是一个基于Java实现的Word2Vec模型,它是自然语言处理领域中一个重要的工具,用于学习单词的分布式表示。Word2Vec是由Google的Tomas Mikolov等人提出的一种深度学习方法,它能够将单词转换为...

    word2Vec数学原理

    Word2Vec是一种在自然语言处理(NLP)中广泛使用的技术,它的目的是通过将词语转化为高维空间中的向量来捕捉词语之间的语义和句法关系。Word2Vec包括两种模型:Skip-gram模型和CBOW(Continuous Bag of Words)模型...

    Go-在Go中读取和使用word2vecvectors

    在自然语言处理(NLP)领域,Word2Vec是一种广泛使用的模型,它通过学习大量文本数据中的词与词之间的共现关系,将每个词映射为一个低维度的向量,使得语义相近的词在向量空间中的距离较近。在Go语言环境下,处理...

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

    2. **获取表格**:在Word文档中找到你需要循环填充的表格。这可以通过`XWPFDocument`的`getTables()`方法实现,然后根据表格的索引或者特征进行选择。 3. **定义数据源**:确定你要插入的数据源。这可以是数据库...

    ssh2+ajx导出导入word

    将这两个概念结合在一起,"ssh2+ajx导入导出word"是指通过SSH2连接远程服务器,并使用AJX技术来实现Word文档的导入与导出功能。这个实例可能是为了解决在Web应用中,用户能够方便地上传、下载和处理Word文档的需求。...

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

    2. 数据库连接与查询:要从SQLite数据库中获取数据,我们需要使用特定的API或库,如Python的sqlite3模块,来建立连接,执行SQL查询语句,获取所需的数据。查询语句可能包括SELECT、JOIN、WHERE等子句,用于筛选和...

Global site tag (gtag.js) - Google Analytics