- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个 C 程序,以便在某个字符串中找到最频繁的 n-gram。
一个n-gram是一个
contiguous sequence of n items from a given sequence of text
但是,函数 most_freq_ngram
中存在段错误。
参数依次为:
这是我的代码:
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <stdarg.h>
#include <errno.h>
typedef struct nodo_t{
char* gram;
int count;
struct nodo_t * next;
} nodo_t;
typedef struct linked_list{
nodo_t * head;
} linked_list;
int compare_arrays(char * igram, char * list_gram, size_t ngram_len){
int i;
for(i=0;i<ngram_len;i++){
if(tolower(list_gram[i]) != tolower(igram[i])) return 0;
}
return 1;
}
void copy_array(char * igram, char * list_gram, size_t ngram_len){
int i;
for(i=0;i<ngram_len;i++)
list_gram[i] = tolower(igram[i]);
}
void add_gram(char * igram, linked_list * list, size_t ngram_len ){
if(list == NULL){
list = malloc(sizeof(linked_list));
nodo_t* head = malloc(sizeof(nodo_t));
head->count = 1;
head->next = NULL;
head->gram = malloc(ngram_len * sizeof(char));
int i;
for(i=0;i<ngram_len;i++)
head->gram[i] = igram[i];
list->head = head;
}else{
nodo_t * sent = list->head;
int found = 0;
while(sent->next != NULL && !found){
//Check every element, otherwise add to que
int same = compare_arrays(igram, sent->gram, ngram_len);
if(same){
sent->count++;
found = 1;
}
sent = sent->next;
}
if(!found){
sent->next = malloc(sizeof(nodo_t));
sent = sent->next;
sent->next = NULL;
sent->count = 1;
copy_array(igram, sent->gram, ngram_len);
}
}
}
void most_freq_ngram(const char* text, size_t text_len, size_t ngram_len, char** ngram){
int i;
linked_list * list = NULL;
for(i=0;i<text_len - ngram_len +1;i++){
char igram[ngram_len+1];
int j;
int temp_i = i;
for(j=0;j<ngram_len;j++){
igram[j] = text[temp_i];
temp_i++;
}
igram[ngram_len] = '\0';
add_gram(igram, list, ngram_len);
}
//Check list for most frequent element
char * most_frequent = malloc(ngram_len * sizeof(char));
int frequency = 0;
nodo_t * sent = list->head;
if(sent == NULL ){
int i;
for(i=0;i<ngram_len;i++)
most_frequent[i] = '\0';
return;
}
while(sent->next != NULL){
if(sent->count > frequency){
copy_array(sent->gram, most_frequent, ngram_len);
frequency = sent->count;
}
}
*ngram = most_frequent;
return ;
}
int main(){
size_t ngram_len = 2;
char *ngram = malloc((ngram_len+1) * sizeof(char));
size_t text_len = 5;
const char text[6] = {'a','a','a','a','a', '\0'};
most_freq_ngram(text, text_len, ngram_len, &ngram);
return 0;
}
最佳答案
您的函数 void add_gram(char * igram, linked_list * list, size_t ngram_len )
不会更改 list
。它更改了 list
的副本。 most_freq_ngram
中的原始list
保持不变(一个NULL指针),导致nodo_t * sent = list->head;
中出现segfault。将add_gram
的第二个参数改为linked_list ** list
,并相应重写函数。
关于找不到 n-gram 算法的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41839013/
我正在阅读有关 n 元语法的内容,我想知道在实践中是否存在优先使用单元语法而不是双元语法的情况(或更高的N-grams)。据我了解,N越大,计算概率和建立向量空间的复杂性就越大。但除此之外,还有其他原
我一直在为我的一个新项目使用 ElasticSearch。我已将默认分析器设置为使用 ngram 标记过滤器。这是我的 elasticsearch.yml 文件: index: analysis:
我正在做一个项目,我需要一个 skip-gram 模型的预训练向量。我听说还有一个名为 skip-n-gram 模型的变体可以提供更好的结果。 我想知道自己训练模型需要什么?因为我只需要它们来为我的模
我正在尝试使用 Lucene (5.5.0) 进行一些字符串标记化(无索引)。我需要: 完全删除包含数字的单词,例如像 log4j 这样的单词应该从字符串中删除 我想将字符串拆分为单字术语和 2 克术
我正在尝试在 Scala 中编写基于 n-gram 的分离新闻算法。 如何为大文件生成 n-gram: 例如,对于包含“蜜蜂是蜜蜂的蜜蜂”的文件。 首先它必须选择一个随机的 n-gram。例如,蜜蜂。
给定一个大文本文件,我想使用 Apache Spark 提取字符 n-gram(并行执行任务)。 示例输入(2 行文本): 第 1 行:(Hello World,它) 第 2 行:(是美好的一天) 输
对我以前的post进行了更新,并做了一些更改: 说我有100条微博。 在这些推特中,我需要提取:1)食品名称,2)饮料名称。我还需要附上类型(饮料或食品)和一个id号(每个项目有一个唯一的id)为每个
我是Python新手,正在研究建筑行业契约(Contract)文件的多类文本分类。我在代码中实现 n 元语法时遇到问题,这些代码是我通过从不同的在线资源获得帮助而生成的。我想在我的代码中实现一元语法、
Gram-Schmidt 正交化算法的计算复杂度是多少? 假设一个m 行和k 列的矩阵,计算正交化需要多少次操作? 如果可能的话,我想要乘法和加法的确切数量。 编辑:在我看来,操作总数(乘法 + 加法
在Keras中可以使用n-gram吗? 例如,句子包含在X_train数据框中,带有“句子”列。 我通过以下方式使用Keras的 token 生成器: tokenizer = Tokenizer(lo
给定一个具有独立列的矩阵 A(不一定是正方形),我能够应用 Gram-Schmidt 迭代并使用 Matlab 的函数 qr 为其列空间(以正交矩阵 Q 的形式)生成正交基 A=[1,1;1,0;1,
我有一个 n-gram 列表 ('allo', 'stesso', 'modo', 'dell’italia,', 'che') ('stesso', 'modo', 'dell’italia,',
我有一个已经被标记化的文档列表: dat result[[2]] [1] "argentine" "crude" "oil"
使用什么算法来查找 ngram? 假设我的输入数据是一个单词数组和我想要查找的 ngram 的大小,我应该使用什么算法? 我要求提供代码,优先选择 R。数据存储在数据库中,因此也可以是 plgpsql
我有一个使用关键字 token 生成器(整个术语是 token )的字段类型,具有小写和边缘n-gram过滤器,例如“Robert Longo”存储为“r”,“ro”,...,“robert l”,“
我正在尝试使用三元组进行下一个单词预测。 我已经能够上传一个语料库并通过它们的频率识别最常见的三元组。我在 R 中使用了“ngrams”、“RWeka”和“tm”包。我按照这个问题寻求指导: What
我正在研究一个增强和替代通信 (AAC) 程序。我当前的目标是存储输入/口语文本的历史记录并搜索常用短语片段或单词 n-gram。我目前使用的是基于 lzw 压缩算法的实现,如 CodeProject
我正在构建一个基于 OpenGL3 的免费开源 3D 游戏引擎(这不是学校作业,而是为了个人技能发展和回馈开源社区)。我已经到了需要学习大量相关数学的阶段,所以我正在阅读一本很棒的教科书,名为“3D
我试图从从文本文档中提取的模式中提取 ngram,模式具有不同数量的术语。 例如:如果模式 p={t1,t2,t3} 我们需要提取 ngram 3 应该是这样的 t1 t2 t3 t1, t2 t2,
我正在编写一个 C 程序,以便在某个字符串中找到最频繁的 n-gram。 一个n-gram是一个 contiguous sequence of n items from a given sequenc
我是一名优秀的程序员,十分优秀!