如何使用3-gram tokenization对字段进行表计划
时间: 2023-06-27 09:03:30 浏览: 67
使用3-gram tokenization对字段进行表计划,可以分为以下几个步骤:
1. 分词:将字段转化为3-gram序列,即将字符串按照每3个字符一组进行切分。例如,字符串"Hello World"可以切分为["Hel", "ell", "llo", "lo ", "o W", " Wo", "Wor", "orl", "rld"]。
2. 统计词频:统计每个3-gram序列在字段中出现的次数。
3. 筛选高频词:根据设定的阈值,筛选出出现频率较高的3-gram序列,作为表计划中的列。
4. 构建表计划:将筛选出的3-gram序列作为列名,每行对应原始字段中的一个3-gram序列出现的次数。
需要注意的是,在进行3-gram分词时,需要考虑到边界情况,即对于原始字符串长度不足3的部分,需要进行特殊处理。另外,在筛选高频词时,阈值的设定需要根据具体数据集进行调整,以保证选出的列能够覆盖大部分信息。
相关问题
请向我展示如何在ORACLE使用3-gram tokenization进行标记化
在ORACLE中,可以使用以下步骤进行3-gram标记化:
1. 创建一个函数,该函数将输入字符串拆分为3-gram标记。下面是一个示例函数:
```
CREATE OR REPLACE FUNCTION trigram_tokenize(input_str IN VARCHAR2)
RETURN sys.odcivarchar2list
DETERMINISTIC
IS
tokens sys.odcivarchar2list := sys.odcivarchar2list();
BEGIN
FOR i IN 1 .. LENGTH(input_str) - 2 LOOP
tokens.EXTEND;
tokens(tokens.COUNT) := SUBSTR(input_str, i, 3);
END LOOP;
RETURN tokens;
END;
```
该函数将输入字符串拆分为3个字符的标记,并将这些标记存储在一个sys.odcivarchar2list类型的数组中。
2. 使用该函数创建一个索引。以下是一个示例:
```
CREATE INDEX idx_trigram ON my_table (
(SELECT column_value FROM TABLE(trigram_tokenize(my_column)))
) INDEXTYPE IS ctxsys.context PARAMETERS ('TOKENIZER CTXSYS.THES_TOKENIZER');
```
该索引使用trigram_tokenize函数将my_column列中的字符串转换为3-gram标记,并将这些标记存储在一个CTXSYS索引中。该索引使用了一个名为CTXSYS.THES_TOKENIZER的标记解析器。
现在,您可以使用3-gram标记进行全文搜索和相似性搜索。
python构建2-gram和3-gram语言模型。
2-gram语言模型:
```python
text = "I love natural language processing"
tokens = text.split()
# 构建2-gram
n = 2
n_grams = []
for i in range(len(tokens)-n+1):
n_grams.append(tuple(tokens[i:i+n]))
# 统计2-gram出现频率
freq = {}
for gram in n_grams:
if gram in freq:
freq[gram] += 1
else:
freq[gram] = 1
# 计算2-gram概率
prob = {}
for gram in freq:
prob[gram] = freq[gram] / len(n_grams)
print(prob)
```
输出:
```
{('I', 'love'): 0.25, ('love', 'natural'): 0.25, ('natural', 'language'): 0.25, ('language', 'processing'): 0.25}
```
3-gram语言模型:
```python
text = "I love natural language processing"
tokens = text.split()
# 构建3-gram
n = 3
n_grams = []
for i in range(len(tokens)-n+1):
n_grams.append(tuple(tokens[i:i+n]))
# 统计3-gram出现频率
freq = {}
for gram in n_grams:
if gram in freq:
freq[gram] += 1
else:
freq[gram] = 1
# 计算3-gram概率
prob = {}
for gram in freq:
prob[gram] = freq[gram] / len(n_grams)
print(prob)
```
输出:
```
{('I', 'love', 'natural'): 0.3333333333333333, ('love', 'natural', 'language'): 0.3333333333333333, ('natural', 'language', 'processing'): 0.3333333333333333}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)