# 教程
這些教程被組織為一系列示例,突出了Gensim的各種功能。假設讀者熟悉[Python語言](https://www.python.org/),[安裝了gensim](/blog/Install/README.md)?并閱讀了[介紹](/blog/Introduction/README.md)。
這些例子分為以下部分:
* [語料庫和向量空間](blog/tutorial/1.md)
* 從字符串到向量
* 語料庫流 - 一次一個文檔
* 語料庫格式
* 與NumPy和SciPy的兼容性
* [主題和轉換](blog/tutorial/2.md)
* 轉換界面
* 可用的轉換
* [相似性查詢](blog/tutorial/3.md)
* 相似界面
* 下一個在哪里
* [英語維基百科上的實驗](blog/tutorial/4.md)
* 準備語料庫
* 潛在語義分析
* 潛在的Dirichlet分配
* [分布式計算](blog/tutorial/5.md)
* 為何分布式計算?
* 先決條件
* 核心概念
* 可用分布式算法
## 預賽
所有示例都可以直接復制到Python解釋器shell。[IPython](http://ipython.scipy.org/)的 `cpaste` 命令對于復制代碼片段(包括主要 `>>>>` 字符)特別方便。
Gensim使用Python的標準 `logging` 模塊來記錄各種優先級的各種東西;?要激活日志記錄(這是可選的),請運行
```py
>>> import logging
>>> logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
```
## 快速示例
首先,讓我們導入gensim并創建一個包含九個文檔和十二個特征的小型語料庫[[1]](https://radimrehurek.com/gensim/tutorial.html#id2):
```py
>>> from gensim import corpora, models, similarities
>>>
>>> corpus = [[(0, 1.0), (1, 1.0), (2, 1.0)],
>>> [(2, 1.0), (3, 1.0), (4, 1.0), (5, 1.0), (6, 1.0), (8, 1.0)],
>>> [(1, 1.0), (3, 1.0), (4, 1.0), (7, 1.0)],
>>> [(0, 1.0), (4, 2.0), (7, 1.0)],
>>> [(3, 1.0), (5, 1.0), (6, 1.0)],
>>> [(9, 1.0)],
>>> [(9, 1.0), (10, 1.0)],
>>> [(9, 1.0), (10, 1.0), (11, 1.0)],
>>> [(8, 1.0), (10, 1.0), (11, 1.0)]]
```
在Gensim中,*語料庫*只是一個對象,當迭代時,返回其表示為稀疏向量的文檔。在這種情況下,我們使用元組列表的列表。如果您不熟悉[矢量空間模型](https://en.wikipedia.org/wiki/Vector_space_model),我們將在下一個關于[Corpora和Vector Spaces的](https://radimrehurek.com/gensim/tut1.html)教程中彌合**原始字符串**,**語料庫**和**稀疏矢量**之間的差距。[](https://radimrehurek.com/gensim/tut1.html)
如果您熟悉向量空間模型,您可能會知道解析文檔并將其轉換為向量的方式會對任何后續應用程序的質量產生重大影響。
> 注意:
在此示例中,整個語料庫作為Python列表存儲在內存中。但是,語料庫接口只表示語料庫必須支持對其組成文檔的迭代。對于非常大的語料庫,有利的是將語料庫保持在磁盤上,并且一次一個地順序訪問其文檔。所有操作和轉換都以這樣的方式實現,使得它們在內存方面獨立于語料庫的大小。
接下來,讓我們初始化一個*轉換*:
```py
>>> tfidf = models.TfidfModel(corpus)
```
轉換用于將文檔從一個向量表示轉換為另一個向量表示:
```py
>>> vec = [(0, 1), (4, 1)]
>>> print(tfidf[vec])
[(0, 0.8075244), (4, 0.5898342)]
```
在這里,我們使用了[Tf-Idf](https://en.wikipedia.org/wiki/Tf%E2%80%93idf),這是一種簡單的轉換,它將文檔表示為詞袋計數,并應用對常用術語進行折扣的權重(或者等同于促銷稀有術語)。它還將得到的向量縮放到單位長度(在[歐幾里德范數中](https://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm))。
[主題和轉換](https://radimrehurek.com/gensim/tut2.html)教程中詳細介紹了[轉換](https://radimrehurek.com/gensim/tut2.html)。
要通過TfIdf轉換整個語料庫并對其進行索引,以準備相似性查詢:
```py
>>> index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=12)
```
并查詢我們的查詢向量`<span class="pre">vec</span>`與語料庫中每個文檔的相似性:
```py
>>> sims = index[tfidf[vec]]
>>> print(list(enumerate(sims)))
[(0, 0.4662244), (1, 0.19139354), (2, 0.24600551), (3, 0.82094586), (4, 0.0), (5, 0.0), (6, 0.0), (7, 0.0), (8, 0.0)]
```
如何閱讀此輸出?文檔編號為零(第一個文檔)的相似度得分為0.466 = 46.6%,第二個文檔的相似度得分為19.1%等。
因此,根據TfIdf文檔表示和余弦相似性度量,最類似于我們的查詢文檔vec是文檔號。3,相似度得分為82.1%。請注意,在TfIdf表示中,任何不具有任何共同特征的 `vec` 文檔(文檔編號4-8)的相似性得分均為0.0。有關更多詳細信息,請參閱[Similarity Queries](https://radimrehurek.com/gensim/tut3.html)教程。
---
> [1] 這與 [Deerwester等人](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf) 使用的語料庫相同[。](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf)[(1990):通過潛在語義分析進行索引](http://www.cs.bham.ac.uk/~pxt/IDA/lsa_ind.pdf),表2。