Tag: n gram

Python:减less字典的内存使用

我试图加载一些文件到内存中。 这些文件有以下三种格式之一: stringTAB int stringTAB浮动 int TAB float。 事实上,他们是ngram静态文件,以防万一这有助于解决scheme。 例如: i_love TAB 10 love_you TAB 12 目前,我正在做的伪代码是 loadData(file): data = {} for line in file: first, second = line.split('\t') data[first] = int(second) #or float(second) return data 令我惊讶的是,虽然磁盘中的文件总大小约为21 MB,但在装入内存时,这个过程需要120 – 180 MB的内存! (整个python应用程序不会将任何其他数据加载到内存中)。 目前只有不到10个文件,其中大部分文件保持稳定,大约在5万到8万行,除了一个文件目前有数百万行。 所以我想问一个技术/数据结构来减less内存消耗: 任何压缩技术的build议? 如果我仍然使用字典,有什么办法来减less内存? 是否有可能像Java中的Python字典中设置“加载因子”? 如果你有其他一些数据结构,“也愿意交易一些速度来减less内存。 不过,这是一个时间敏感的应用程序,所以一旦用户input他们的查询,我认为花费超过几秒的时间来返回结果是不合理的。 关于这一点,我仍然对谷歌如何快速完成谷歌翻译感到惊讶:他们必须使用大量的技术和大量的服务器function。 非常感谢你。 我期待你的build议。

Elasticsearch:查找子串匹配

我想要执行确切的单词匹配和部分单词/子串匹配。 例如,如果我search“男士razor”,那么我应该能够在结果中find“男士razor”。 但是,如果我search“en的razor”,那么我也应该能够find“男士razor”的结果。 我使用以下设置和映射: 索引设置: PUT /my_index { "settings": { "number_of_shards": 1, "analysis": { "filter": { "autocomplete_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 20 } }, "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "autocomplete_filter" ] } } } } } 映射: PUT /my_index/my_type/_mapping { "my_type": { "properties": { "name": { "type": […]

python四克,五克,六克?

我正在寻找一种将文本分成n-gram的方法。 通常我会做这样的事情: import nltk from nltk import bigrams string = "I really like python, it's pretty awesome." string_bigrams = bigrams(string) print string_bigrams 我知道nltk只提供bigrams和trigrams,但是有没有办法把文本分成四克,五克甚至几百克? 谢谢!

在Python中简单实现N-Gram,tf-idf和余弦相似性

我需要比较存储在数据库中的文档,并得出0到1之间的相似性分数。 我需要使用的方法非常简单。 实现n-gram的vanilla版本(可以定义使用多less克),以及tf-idf和Cosine相似度的简单实现。 有没有什么程序可以做到这一点? 还是应该从头开始写这个?

使用ElasticSearchsearch文件名

我想使用ElasticSearchsearch文件名(而不是文件的内容)。 所以我需要find文件名的一部分(完全匹配,没有模糊search)。 例: 我有以下名称的文件: My_first_file_created_at_2012.01.13.doc My_second_file_created_at_2012.01.13.pdf Another file.txt And_again_another_file.docx foo.bar.txt 现在我想search2012.01.13获取前两个文件。 searchfile或file应该返回除最后一个以外的所有文件名。 我如何使用ElasticSearch来完成? 这是我testing过的,但总是返回零结果: curl -X DELETE localhost:9200/files curl -X PUT localhost:9200/files -d ' { "settings" : { "index" : { "analysis" : { "analyzer" : { "filename_analyzer" : { "type" : "custom", "tokenizer" : "lowercase", "filter" : ["filename_stop", "filename_ngram"] } }, "filter" : { […]

从一个句子生成N-gram

如何生成一个string的n元组,​​如: String Input="This is my car." 我想用这个input生成n-gram: Input Ngram size = 3 输出应该是: This is my car This is is my my car This is my is my car 在Java中给出一些想法,如何实现它,或者是否有可用的库。 我正在尝试使用这个NGramTokenizer,但它给出了n-gram的字符序列,我想要n-gram的字序列。