# encoding=utf-8 import nltk import json from nltk.corpus import stopwords import re eg_stop_words = set(stopwords.words('english')) sp_stop_words = set(stopwords.words('spanish')) all_stop_words = eg_stop_words.union(sp_stop_words) input_file_name = r'建模.txt' output_file_name = r'train.txt' out_file = open(output_file_name, encoding='utf-8', mode='w') # 打开输出文件 with open(output_file_name, encoding='utf-8', mode='w') as output_file: # 打开输入文件,对每一行进行处理 with open(input_file_name, encoding='utf-8') as f: for idx, line in enumerate(f): print("正在处理第{}行数据".format(idx)) if idx == 0: # 第一行是列名, 不要 print(line) continue line = line.strip() sps = line.split("\t") # 将行按制表符分隔为列表 report_no = sps[0] target = sps[2] smses = sps[-1] smses = smses.strip("\"") # 去掉短信两端的引号 smses = smses.replace("\"\"", "\"") # 把两个双引号转换成单引号 root = json.loads(smses) # 解析 json 格式的短信 msg = "" for item in root: # 遍历短信中的每一条信息 body = item["body"] # 获取信息的正文 msg += body + "\n" # 把正文追加到总的信息传递过来的msg中 text = re.sub(r'[^\w\s]', '', msg) # 使用正则表达式去掉标点符号 text = re.sub(r'http\S+', '', text) # 去掉链接 text = re.sub(r'\d+', '', text)#去除数字 text = text.lower() words = text.split() filtered_words = [word for word in words if word not in all_stop_words] text = ' '.join(filtered_words) print(report_no + '\t' + target) msg = target + '\u0001' + text + '\n' out_file.write(msg) out_file.close()
时间: 2024-02-14 17:26:10 浏览: 103
这段代码是一个文本处理的程序,它的作用是从一个输入文件中提取出特定字段的数据,并进行一系列的文本清洗和预处理操作,最后将处理后的数据写入到一个输出文件中。
具体来说,这段代码的主要流程如下:
1. 导入必要的库:nltk和json用于文本处理,re用于正则表达式匹配。
2. 定义一些常量和变量,如输入文件名、输出文件名,以及一些停用词。
3. 打开输出文件,准备写入处理后的数据。
4. 打开输入文件,并逐行处理每一行数据。
5. 第一行是列名,跳过不处理。
6. 去除行两端的空格,然后按制表符分隔行为列表。
7. 根据特定的索引获取需要的字段数据,如报告编号、目标字段和短信字段。
8. 去除短信字段两端的引号,并将两个双引号替换为单引号。
9. 解析短信字段中的JSON格式数据,获取每条短信的正文。
10. 使用正则表达式去除正文中的标点符号和链接。
11. 去除正文中的数字。
12. 将正文转换为小写,并按空格分割为单词列表。
13. 去除停用词,并将处理后的单词列表重新组合为文本。
14. 将目标字段和处理后的文本拼接为一行数据,并写入输出文件中。
15. 关闭输出文件。
这段代码的功能是将输入文件中的短信数据进行清洗和预处理,以便后续的建模或分析任务使用。
相关问题
encoding=utf-8 import nltk import json from nltk.corpus import stopwords import re eg_stop_words = set(stopwords.words('english')) sp_stop_words = set(stopwords.words('spanish')) all_stop_words = eg_stop_words.union(sp_stop_words) input_file_name = r'建模.txt' output_file_name = r'train.txt' out_file = open(output_file_name, encoding='utf-8', mode='w') 打开输出文件 with open(output_file_name, encoding='utf-8', mode='w') as output_file: # 打开输入文件,对每一行进行处理 with open(input_file_name, encoding='utf-8') as f: for idx, line in enumerate(f): print("正在处理第{}行数据".format(idx)) if idx == 0: # 第一行是列名, 不要 print(line) continue line = line.strip() sps = line.split("\t") # 将行按制表符分隔为列表 report_no = sps[0] target = sps[2] smses = sps[-1] smses = smses.strip(""") # 去掉短信两端的引号 smses = smses.replace("""", """) # 把两个双引号转换成单引号 root = json.loads(smses) # 解析 json 格式的短信 msg = "" for item in root: # 遍历短信中的每一条信息 body = item["body"] # 获取信息的正文 msg += body + "\n" # 把正文追加到总的信息传递过来的msg中 text = re.sub(r'[^\w\s]', '', msg) # 使用正则表达式去掉标点符号 text = re.sub(r'http\S+', '', text) # 去掉链接 text = re.sub(r'\d+', '', text)#去除数字 text = text.lower() words = text.split() filtered_words = [word for word in words if word not in all_stop_words] text = ' '.join(filtered_words) print(report_no + '\t' + target) msg = target + '\u0001' + text + '\n' out_file.write(msg) out_file.close()帮我改成用 pandas 处理
当使用 pandas 进行处理时,你可以使用 `pandas.read_csv()` 函数读取文件,并使用 DataFrame 进行数据处理。以下是使用 pandas 进行处理的示例代码:
```python
import pandas as pd
import nltk
from nltk.corpus import stopwords
import re
eg_stop_words = set(stopwords.words('english'))
sp_stop_words = set(stopwords.words('spanish'))
all_stop_words = eg_stop_words.union(sp_stop_words)
input_file_name = '建模.txt'
output_file_name = 'train.txt'
df = pd.read_csv(input_file_name, encoding='utf-8', sep='\t')
# 处理每一行数据
for idx, row in df.iterrows():
print("正在处理第{}行数据".format(idx))
if idx == 0:
# 第一行是列名,不需要处理
continue
smses = row['短信']
smses = smses.strip("'")
smses = smses.replace('""', "'")
root = json.loads(smses)
msg = ""
for item in root:
body = item["body"]
msg += body + "\n"
text = re.sub(r'[^\w\s]', '', msg)
text = re.sub(r'http\S+', '', text)
text = re.sub(r'\d+', '', text)
text = text.lower()
words = text.split()
filtered_words = [word for word in words if word not in all_stop_words]
text = ' '.join(filtered_words)
df.at[idx, '目标'] = row['目标'] + '\u0001' + text
df.to_csv(output_file_name, encoding='utf-8', sep='\t', index=False)
```
这段代码将会读取名为 '建模.txt' 的文件,并根据每一行的数据进行处理,最后将处理后的结果保存到 'train.txt' 文件中。注意在使用该代码前,你需要先安装 pandas 和 nltk 库。
以下使用的代码中的方法,包含了哪些研究方法:###--------------------读取原始数据-------------------- import pandas as pd data = pd.read_excel(r'C:\Users\apple\Desktop\“你会原谅伤害过你的父母吗”话题爬虫文件.xlsx') data = data.iloc[:,4] data = data.rename("评论") ###--------------------数据清洗-------------------- ##去除微博话题引用 import re new_data = [] # 用于存放处理后的数据 for d in data: new_d = re.sub(r'#.+?#', '', d) # 使用正则表达式去除两个“#”之间的内容 new_data.append(new_d) data['评论'] = new_data ##去除停用词 import nltk from nltk.corpus import stopwords nltk.download('stopwords') # 下载停用词列表,如果已经下载可忽略此步骤 stop_words = set(stopwords.words('chinese')) # 加载英文停用词列表 data1 = [] # 用于存放处理后的数据 for d in new_data: words = d.lower().split() # 将文本转换为小写并分词 new_words = [word for word in words if word not in stop_words] # 过滤停用词 new_d = ' '.join(new_words) # 将处理后的词语连接成字符串 data1.append(new_d) new_data = data1 ##去除特殊字符 # 定义正则表达式 pattern = re.compile('[^\u4e00-\u9fa5^a-z^A-Z^0-9^ \^,^.^!^?^;^\u3002^\uFF1F^\uFF01^\u3001]') # 遍历list中的每个元素,使用re.sub函数将字符串中匹配正则表达式的部分替换为空字符串 for i in range(len(new_data)): new_data[i] = re.sub(pattern, '', new_data[i]) ##英文翻译成中文 from translate import Translator translator= Translator(to_lang="zh") for i in range(len(new_data)): # 判断文本中是否含有英文单词,如果有则翻译成中文 if re.search('[a-zA-Z]', new_data[i]): new_data[i] = translator.translate(new_data[i]) ##jieba分词 import jieba import jieba.analyse data_list = [jieba.lcut(text) for text in new_data]
以下使用的方法包含了数据读取、数据清洗、文本预处理和分词等研究方法。数据读取是为了获取原始数据,数据清洗是为了去除无效信息和噪声,文本预处理是为了将文本转化为数字向量表示,而分词则是将文本划分为词语的过程,是文本预处理的重要步骤之一。其中,数据清洗包括了去除微博话题引用、停用词过滤和特殊字符去除等步骤,这些步骤可以有效提高文本分类的准确性。而文本预处理包括了英文翻译成中文、数字向量表示等过程,这些过程是将文本转化为机器可读的形式,为后续的算法建模做准备。分词则是将文本划分为词语的过程,是文本预处理的重要步骤之一,可以提高文本分类的效率和准确性。总之,这些方法的使用有助于对微博话题文本进行分类,提高文本分类的准确性和效率。
阅读全文