關於使用TF IDF模型來推薦歌曲給微博使用者的收穫

2021-06-22 13:05:02 字數 3913 閱讀 3866

一開始不知道該如何去做這個作業,但在同學的指導下知道了如何快速的做成。

其次,把微博內容和歌曲歌詞弄到文字裡;

然後就是分詞的工作了,分詞主要用的是jieba分詞,通過使用他可以把文字分成乙個個單詞,也可以使用他提取出關鍵字,然後再試用tf-idf模型去比較相似度就可以完成了。

其中,我還學習了如何在linux中編譯c++

g++是gcc中的乙個工具,專門來編譯c++語言的。

gcc的引數有:( 也是分步實現)

-e  讓gcc在預處理結束後停止編譯  g++ -e hello.cpp  -o  hello.i

-c  將hello.i編譯成目標** g++  -c  hello.i  -o  hello.o

將目標檔案連線成可執行檔案   g++ hell.o   -o   hello

可以一步實現   g++  hello.cpp  -o  hello

如何在linux中讀取,寫入文字c函式庫中檔案操作函式

(1)fopen

函式原型:file* fopen(char *path, char *mode);

函式說明:

開啟乙個檔案。 

(2)fgetc

函式原型:int fgetc(file *stream);

函式說明:

從檔案中讀取乙個字元。出錯或檔案尾返回

eof。

(3)fputc

函式原型:int fputc(int c, file *stream);

函式說明:

將乙個字元寫入到文字檔案中。

(4)fgets

函式原型:char* fgets(char *s, int size, file *stream);

函式說明:

從檔案中讀取一行字串

(遇回車換行則函式返回

)。如果為檔案尾返回

null。s

表示要儲存讀取到資料的位置,

size為s

的大小。

(5)fputs

函式原型:int fputs(char *s, file *stream);

函式說明:

將一行字串寫入到檔案中。

(6)fprintf

函式原型:fsprintf(file *stream, const char *format, ...);

函式說明:

格式化字串到檔案中。

(7)fread

函式原型:size_t fread(void *ptr, size_t size, size_t nmemb, file *stream);

函式說明:

按每多少個位元組讀取檔案。

ptr表示資料緩衝區,

size

表示每次讀取的位元組數,

nmemb

表示讀取的次數,函式返回讀取成功的次數,遇

eof結束讀取返回0.

(8)fwrite

函式原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, file *stream);

函式說明:

按每多少個位元組將資料寫入到檔案中。

ptr表示資料緩衝區,

size

表示每次寫入的位元組數,

nmemb

表示寫入的次數。

(9)fseek

函式原型:int fseek(file *stream, long offset, int whence);

函式說明:

移動檔案流的讀寫位置。

whence

的可取值:

seek_set(

檔案頭)

、seek_cur(

檔案當前位置)、

seek_end(

檔案尾).

(10)fclose

函式原型:int fclose(file *stream);

函式說明:

關閉乙個檔案

linux函式庫中檔案操作函式

(1)open

函式原型:int open(const char *pathname, int oflag, ...);

函式說明:

開啟乙個檔案。函式返回檔案描述符fd。

(2)read

函式原型:size_t read(int fd, void *buf, size_t nbytes);

函式說明:

按指定位元組大小讀取檔案。如果函式執行成功,

read

返回乙個非負數,表示本次操作實際讀入的位元組數。遇

eof失敗返回

-1.

(3)write

函式原型:size_t write(int fd, void *buf, size_t nbytes);

函式說明:

按指定位元組大小寫入檔案。

(4)lseek

函式原型:off_t lseek(int fd, off_t offset, int whence);

函式說明:

移動檔案讀寫流的位置。

(5)close

函式原型:int close(int fd);

函式說明:

關閉乙個檔案。

還有字串與int,char的轉換:

string.data()得到string中的char ×指標;

harbuf[10];

sprintf(buf,"%d", 100);

string b = buf;

map的使用

c++中map容器提供乙個鍵值對容器,map與multimap差別僅僅在於multiple允許乙個鍵對應多個值。   

map的說明  

1   標頭檔案 

#include   

2   定義 

mapmy_map; 

或者是typedef     mapmy_map; 

my_map   my_map; 

3   插入資料 

(1)   my_map["a"]   =   1; 

(2)   my_map.insert(map::value_type("b",2)); 

(3)   my_map.insert(pair("c",3)); 

(4)   my_map.insert(make_pair("d",4)); 

4   查詢資料和修改資料 

(1)   int   i   =   my_map["a"]; 

my_map["a"]   =   i; 

(2)   my_map::iterator   my_itr; 

my_itr.find("b"); 

int   j   =   my_itr->second; 

my_itr->second   =   j; 

不過注意,鍵本身是不能被修改的,除非刪除。 

5   刪除資料 

(1)   my_map.erase(my_itr); 

(2)   my_map.erase("c"); 

還是注意,第一種情況在迭代期間是不能被刪除的,道理和foreach時不能刪除元素一樣。 

6   迭代資料 

for   (my_itr=my_map.begin();   my_itr!=my_map.end();   ++my_itr)   {} 

7   其它方法 

my_map.size()               返回元素數目 

my_map.empty()       判斷是否為空 

my_map.clear()           清空所有元素

NLP 使用TF IDF模型計算文字相似度

所用資料集 chnsenticorp htl all.csv 語料庫即存放稀疏向量的列表。要注意的是,搜尋文字text與被檢索的文件共用乙個特徵詞詞典。主要使用gensim庫完成了分詞 tf idf模型訓練 文字相似度計算。過程如下 分詞 建立特徵詞典 建立語料庫 用tf idf模型處理語料庫 計算...

使用物件模型來建立內容型別

一 首先定義乙個函式來建立內容型別,如下 private spcontenttype createcontenttype spweb web,string typename,string basetypename,string description else contenttype new spc...

為何推薦使用 class 而不用 id 來定義樣式

1 相對於class選擇器,id選擇器的權重實在太重了 100 這在一些專案中會造成災難性的樣式汙染,以及權重陷阱。2 id在文件內必須是唯一的,而樣式很多具有復用性。3 至於為什麼大多數js使用id作為鉤子,主要因為js通過id查詢dom的速度是最快的。4 其實class的誕生就是為了樣式服務。i...