鱼C论坛

 找回密码
 立即注册
查看: 708|回复: 3

做lda分析前的文本预处理卡住了

[复制链接]
发表于 2024-3-22 08:44:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
!pip install jieba
import os
import pandas as pd
import re
import jieba
import jieba.posseg as psg   #导入lda分析需要的一系列包
def chinese_word_cut(mytext):   #对数据进行中文分词
    jieba.load_userdict(dic_file)
    jieba.initialize()
    try:
        stopword_list = open(stop_file,encoding ='utf-8')  #防止出现乱码错误,故指定编码类型为'utf-8'
    except:
        stopword_list = []
        print("error in stop_file")
    stop_list = []
    flag_list = ['n','nz','vn']
    for line in stopword_list:
        line = re.sub(u'\n|\\r', '', line)
        stop_list.append(line)
   
    word_list = []
    #jieba分词
    seg_list = psg.cut(mytext)
    for seg_word in seg_list:
        word = re.sub(u'[^\u4e00-\u9fa5]','',seg_word.word)
        word = seg_word.word  #如果想要分析英语文本,注释这行代码,启动下行代码
        find = 0
        for stop_word in stop_list:
            if stop_word == word or len(word)<2:     #this word is stopword
                    find = 1
                    break
        if find == 0 and seg_word.flag in flag_list:
            word_list.append(word)      
    return (" ").join(word_list)
data["content_cutted"] = data.content.apply(chinese_word_cut)
#使用apply函数不断调用以上函数批量处理全部文本(正文)信息
data.content_cutted.head()
#查看文本是否已被正确分词
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-22 08:44:53 | 显示全部楼层
您的代码在停用词处理的地方卡住了。其中,您定义了一个`stopword_list`,用于存储停用词,但是未对其进行赋值。另外,`stop_list`被赋值为空列表,同样需要赋予一个初始值。

接下来,你可以尝试修改代码如下:
import os
import pandas as pd
import re
import jieba
import jieba.posseg as psg

def chinese_word_cut(mytext, dic_file, stop_file):
    jieba.load_userdict(dic_file)
    jieba.initialize()
    try:
        stopword_list = open(stop_file, encoding='utf-8').readlines()
    except:
        print("error in stop_file")
        return None
    
    stop_list = []
    flag_list = []
    for line in stopword_list:
        line = re.sub(u'\n|\\r', '', line)
        stop_list.append(line)
    
    word_list = []
    seg_list = psg.cut(mytext)
    for seg_word in seg_list:
        word = re.sub(u'','',seg_word.word)
        word = seg_word.word
        find = 0
        for stop_word in stop_list:
            if stop_word == word or len(word)
                find = 1 # 如果找到停用词,将find设置为1
                break
                
        if not find: # find为0时,表示未找到停用词
            word_list.append(word)
    
    return word_list

# 使用示例
mytext = "这是一段需要进行中文分词的文本"
dic_file = "your_dictionary.txt" # 替换为你的自定义词典文件名
stop_file = "your_stopwords.txt" # 替换为你的停用词文件名

result = chinese_word_cut(mytext, dic_file, stop_file)
print(result)

在上述代码中,我添加了函数参数`dic_file`和`stop_file`,您需要根据实际情况替换为自己的词典文件和停用词文件。另外,我对`stopword_list`进行了赋值操作,将读取的停用词文件内容按行保存到列表中。最后,我对词列表进行了判断,如果某个词不是停用词,则将其添加到`word_list`中。最终,`word_list`存储了分词结果,可供后续处理使用。

希望能对您有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-3-22 08:47:44 | 显示全部楼层
运行后一直是内核正忙,错误也没报
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-22 08:47:56 | 显示全部楼层
roro0209 发表于 2024-03-22 08:47
运行后一直是内核正忙,错误也没报


如果您在运行代码时遇到内核卡住的情况,并且没有显示错误信息,可能是因为代码中的某个部分导致了无限循环或其他耗时操作。这种情况下,您可以尝试以下几点来解决问题:

1. 检查代码逻辑:仔细检查代码,确保没有出现无限循环、死循环或其他可能导致程序卡住的逻辑错误。
2. 数据量控制:如果您的数据量较大,可能会导致程序处理时间过长而使内核卡住。您可以尝试对数据进行裁剪或分批处理,以减少计算负荷。
3. 输出调试信息:在代码中添加一些打印语句,输出一些中间结果,以便查看程序执行到哪个步骤时出现问题。
4. 尝试其他IDE或编辑器:如果您使用的是Jupyter Notebook,可以尝试在其他IDE或文本编辑器中运行代码,看是否能够避免内核卡住的问题。
5. 重启内核:有时候,内核可能会由于某些原因而卡住。您可以尝试重启内核,然后重新运行代码。
6. 检查包版本:某些包的版本可能与其他包不兼容,导致代码执行异常。您可以尝试检查相关包的版本,并尝试更新或降级。

希望以上方法能够帮助您解决问题!如果问题仍然存在,请提供更多的信息,以便我们能够更好地帮助您。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 10:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表