一開始不知道該如何去做這個作業,但在同學的指導下知道了如何快速的做成。
其次,把微博內容和歌曲歌詞弄到文字裡;
然後就是分詞的工作了,分詞主要用的是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 ×指標;
har
buf[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...