Я получаю эту ошибку, и я не уверен, как это исправить. Это проект по поиску информации, в котором я пытаюсь вычислить tf-idf, используя этот тип (1+log(freq(t,n)))*log(N/k)< /сильный>. freq(t,n) – частота слова, t в файле n и N – число всего файлов, k количество файлов, содержащих слово t.
Undefined first referenced
symbol in file
log /var/tmp//ccx8E8Y1.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status
вот моя функция, где я получаю ошибку (у меня есть #include <math.h>
в начале):
void makeTF_IDF(char** words,double** weight,char** str){
int i,j,n,f;
char nameout[1024],line[1024];
double tf,idf[1443],t;
FILE *fin;
for(i=0;i<1443;i++){
n=0;
for(j=0;j<26;j++){
strcpy(nameout,strtok(str[j],"."));
strcat(nameout,"out.txt");
fin=fopen(nameout,"r");
while(1){
if(fgets(line,1024,fin)==NULL) break;
if(strstr(line,words[i])!=NULL){
n++;
break;
}
}
fclose(fin);
}
t=26/n;
idf[i]=log(t);
}
for(i=0;i<1443;i++){
for(j=0;j<26;j++){
f=0;
strcpy(nameout,strtok(str[j],"."));
strcat(nameout,"out.txt");
fin=fopen(nameout,"r");
while(1){
if(fgets(line,1024,fin)==NULL) break;
if(strstr(line,words[i])!=NULL) f++;
}
weight[j][i]=(log(1+f))*idf[i];
fclose(fin);
}
}
}
tf
не используется в опубликованном коде - person user3629249   schedule 29.11.2015fgets()
вторым параметром должно бытьsizeof(line)
, чтобы размер переменнойline[]
можно было менять без внесения в программу лишних ошибок - person user3629249   schedule 29.11.2015if(strstr(line,words[i])!=NULL) f++;
не ищет в массиве**words
указателей на массивы символов любое совпадение для каждогоword[]
, и поскольку каждый проход через окружающий цикл while(1) просматривает новую строку. - person user3629249   schedule 29.11.2015fin=fopen(nameout,"r");
необходимо проверить (!=NULL), чтобы убедиться, что операция прошла успешно, прежде чем пытаться читать из связанного файла. - person user3629249   schedule 29.11.2015