自然语言预处理(一)分词(char & word)

本文介绍如何使用Python处理文本文件,包括去除换行符、转换编码,并使用jieba库进行中文分词。首先展示了逐字符处理的方法,随后提供了基于jieba的分词示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

infile=open('test.txt')

outfile =open('formatedtest.txt','w')

for line in infile:

    line =line.rstrip('\n')

    unicodeline=unicode(line,'gb2312')

    length=len(unicodeline)

    i=0

    while i<length:

        #print unicodeline[i]

        d=unicodeline[i].encode('utf-8')     

        outfile.write(d)

        outfile.write(' ')

        i+=1

这里是 对汉字后面加一个空格,当训练的样本是按照 char 来分词的时候,可以这样做。

下面是 按照 jieba 分词写的:

就是对按照汉语的词分开,比如 中国的高山很巍峨。 就会分为《中国 的 高山 很 巍峨 。》

import jieba

f=open("hello.txt","rb")

f1=open("hello1.txt","w",encoding='utf-8')

global line_old

for line in f:# 读取每一行

line_uni = line.decode('utf-8')

line_uni.strip()

# print(line_uni)

# print(line_uni[-3])

# split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)

line_new = seg_list = jieba.cut(line_uni)

line_new =" ".join(line_new)

f1.writelines(line_new)

f.close()

f1.close()

&lt;think&gt;好的,用户想用RNN或LSTM处理诗歌数据并生成古诗或现代诗。首先,我需要回忆下之前提到的引用内容,特别是关于宋词生成和预处理的部分。用户之前提到使用word2Vec、TextCNN等模型,现在转向RNN/LSTM,可能需要结合这些经验。 首先,数据预处理是关键。引用里提到分词和规则抽取,比如引用[2]中的基于规则的方法可能对古诗结构有帮助。但唐诗宋词有严格的格式,比如五言、七言,分词可能需要特殊处理。现代诗可能更自由,所以预处理步骤可能需要不同策略。然后,停用词处理。古诗中的虚词如&ldquo;之&rdquo;、&ldquo;乎&rdquo;可能需要保留,因为它们对格律重要,而现代诗可能需要去掉常见的停用词。这里需要区分不同数据集的处理方式。接下来是构建语言模型。RNN和LSTM适合序列数据,但诗歌有固定的结构,比如押韵和平仄。可能需要引入注意力机制或特殊标记来处理换行和押韵位置。引用[3]提到的CBOW和Skip-gram可能用于词向量训练,但用户现在要用RNN,所以可能需要先训练词嵌入层。用户可能遇到的问题包括数据量不足、诗歌的格式要求严格。需要建议数据增强方法,比如数据扩增或迁移学习。另外,评估生成的诗是否符合格律,可能需要设计特定的评估指标,而不仅仅是困惑度。还要考虑生成过程中的采样策略,比如温度参数或束搜索,以平衡创造性和准确性。引用[1]中的模型比较可能有帮助,可以建议用户尝试不同网络结构,比如LSTM加Attention。最后,用户可能需要代码示例,比如预处理步骤和模型定义。需要确保代码符合他们的框架,比如使用TensorFlow或PyTorch。同时,提醒他们超参数调优和多次训练的重要性。&lt;/think&gt;### 诗歌生成模型的构建步骤 #### 、数据预处理 1. **分词与格式解析** - **唐诗宋词**:需保留诗句结构(如五言/七言),按字或词为单位分割。例如: $$春眠 \rightarrow [春, 眠] \quad 或 \quad [春眠]$$ 引用[2]中提到的基于语法结构的规则可辅助拆分复合词[^2]。 - **现代诗歌**:使用结巴分词等工具,结合自定义词典处理新词,例如: $$&quot;月光如水&quot; \rightarrow [月光, 如, 水]$$ 2. **停用词处理** - **古诗**:保留虚词(如&ldquo;兮&rdquo;&ldquo;哉&rdquo;),仅去除标点及无意义符号。 - **现代诗**:使用通用停用词表(如&ldquo;的&rdquo;&ldquo;了&rdquo;),需根据语料库调整。 3. **数据增强** - 对短样本添加位置编码,例如为五言诗添加`&lt;POS_1&gt;`到`&lt;POS_5&gt;`标签: $$[春, &lt;POS_2&gt;, 眠, &lt;POS_4&gt;, 晓]$$ #### 二、模型构建 1. **Embedding层设计** 使用预训练的Word2Vec或随机初始化词向量,引用[3]中Skip-gram模型适合捕捉诗歌的上下文关系[^3]: ```python embedding_layer = tf.keras.layers.Embedding(input_dim=vocab_size, output_dim=128) ``` 2. **RNN/LSTM结构** - 使用双向LSTM捕捉前后文依赖: ```python lstm_layer = tf.keras.layers.Bidirectional( tf.keras.layers.LSTM(256, return_sequences=True) ) ``` - 添加注意力机制优化关键词权重: ```python attention_layer = tf.keras.layers.Attention() ``` 3. **训练策略** - 采用**Teacher Forcing**加速收敛,损失函数使用交叉熵: $$L = -\sum_{t=1}^T \log P(w_t | w_{1:t-1})$$ #### 三、生成控制 1. **温度采样** 调整Softmax温度参数$\tau$控制生成多样性: $$P(w) = \frac{\exp(z_w / \tau)}{\sum \exp(z_i / \tau)}$$ 2. **押韵约束** 在输出层添加韵脚过滤器,例如限制末字为预设韵母(&ldquo;ang&rdquo;&ldquo;ing&rdquo;)。 ### 代码示例(数据预处理) ```python import jieba def preprocess_poem(text, is_classical=True): # 古典诗词按字分割 if is_classical: tokens = [char for line in text.split(&#39;\n&#39;) for char in line.strip()] # 现代诗用分词工具 else: tokens = jieba.lcut(text) # 过滤特殊符号 return [token for token in tokens if token not in [&#39;《&#39;, &#39;》&#39;]] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值