如何从非结构化文本生成数据表及将Ngram结果转CSV(Python/R)
一、将Ngram字典转换为CSV文件(Python)
提供两种实用实现方式:
- 方法1:使用内置
csv模块(无需额外安装依赖)
import csv # 你的Ngram字典 ngram_dict = {'vida': 113, 'sistema': 104, 'ejemplo': 56} # 写入CSV文件 with open('ngram_counts.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['words', 'Count']) # 写入表头 for word, count in ngram_dict.items(): writer.writerow([word, count])
- 方法2:使用
pandas(代码更简洁,适合处理大规模数据)
import pandas as pd ngram_dict = {'vida': 113, 'sistema': 104, 'ejemplo': 56} # 字典转DataFrame,直接保存为CSV pd.DataFrame(list(ngram_dict.items()), columns=['words', 'Count'])\ .to_csv('ngram_counts.csv', index=False, encoding='utf-8')
二、从非结构化文本创建数据表
Python实现
场景1:文本行自带分隔规则(如逗号、空格分隔)
如果文本内容是每行对应一条结构化记录,直接按分隔符拆分:
import pandas as pd # 读取文本并按分隔符分割列,自定义表头 df = pd.read_csv('unstructured_text.txt', sep=',', names=['word', 'count', 'category']) # 保存为结构化CSV df.to_csv('structured_table.csv', index=False)
场景2:从自由文本提取结构化信息(如实体、关键词)
用spaCy提取实体示例:
import pandas as pd import spacy # 加载对应语言模型(需提前安装:pip install spacy && python -m spacy download en_core_web_sm) nlp = spacy.load("en_core_web_sm") # 读取非结构化文本文件 with open('raw_text.txt', 'r', encoding='utf-8') as f: raw_text = f.read() # 提取实体并整理为数据表 doc = nlp(raw_text) entity_list = [{'Entity': ent.text, 'Type': ent.label_} for ent in doc.ents] pd.DataFrame(entity_list).to_csv('entity_table.csv', index=False)
R实现
场景1:按分隔符拆分文本行
# 读取文本文件 text_lines <- readLines("unstructured_text.txt", encoding = "UTF-8") # 分割每行数据并转为数据框 structured_df <- do.call(rbind, strsplit(text_lines, ",")) colnames(structured_df) <- c("word", "count", "category") # 保存为CSV write.csv(structured_df, "structured_table.csv", row.names = FALSE, fileEncoding = "UTF-8")
场景2:提取文本关键词生成数据表
用tidytext工具包:
library(tidytext) library(dplyr) library(readr) # 读取非结构化文本 raw_text <- read_file("raw_text.txt", locale = locale(encoding = "UTF-8")) # 分词并统计词频,生成数据表 word_table <- data.frame(text = raw_text) %>% unnest_tokens(word, text) %>% count(word, sort = TRUE) %>% rename(Count = n) # 保存结果 write.csv(word_table, "word_freq_table.csv", row.names = FALSE, fileEncoding = "UTF-8")
内容的提问来源于stack exchange,提问作者lasagna
相关产品推荐
相关产品推荐

