精华内容
下载资源
问答
  • python自然语言处理中文停用词,总共有大约2000个,按照txt格式去保存,大家下载下来可以处理为csv格式的。
  • 用于中文文本分词,去停用词,包含基本的停用词词典,可根据需要进行扩充。
  • 我正在尝试从文本字符串中删除停用词:123from nltk.corpus import stopwordstext = 'hello bye the the hi'text = ' '.join([word for word in text.split() if word not in (stopwords.words('english'))])我正在...

    我正在尝试从文本字符串中删除停用词:

    1

    2

    3from nltk.corpus import stopwords

    text = 'hello bye the the hi'

    text = ' '.join([word for word in text.split() if word not in (stopwords.words('english'))])

    我正在处理600万这种字符串,因此速度很重要。 分析我的代码,最慢的部分是上面的几行,是否有更好的方法来做到这一点? 我正在考虑使用正则表达式的re.sub之类的东西,但是我不知道如何为一组单词写模式。 有人可以帮我吗,我也很高兴听到其他可能更快的方法。

    注意:我尝试过有人建议用set()包装stopwords.words('english'),但这没什么区别。

    谢谢。

    stopwords.words(english)有多大?

    @SteveBarnes 127个单词的列表

    您将其包装在列表理解内还是外部? 尝试添加stw_set = set(stopwords.words(english))并使用此对象代替

    @alko我以为我将其包装在外面并没有任何效果,但是我只是再次尝试了一下,现在我的代码运行速度至少快了10倍!!!

    您是逐行处理文本还是一起处理文本?

    @glasslion逐行

    NLTK可能会删除停用词

    尝试缓存停用词对象,如下所示。每次调用函数时都要构造它,这似乎是瓶颈。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16from nltk.corpus import stopwords

    cachedStopWords = stopwords.words("english")

    def testFuncOld():

    text = 'hello bye the the hi'

    text = ' '.join([word for word in text.split() if word not in stopwords.words("english")])

    def testFuncNew():

    text = 'hello bye the the hi'

    text = ' '.join([word for word in text.split() if word not in cachedStopWords])

    if __name__ =="__main__":

    for i in xrange(10000):

    testFuncOld()

    testFuncNew()

    我通过探查器运行了此命令:python -m cProfile -s累积test.py。相关行如下。

    nCalls累积时间

    10000 7.723个单词.py:7(testFuncOld)

    10000 0.140个单词。py:11(testFuncNew)

    因此,缓存停用词实例可以使速度提高约70倍。

    同意性能的提高来自缓存停用词,而不是真正创建set。

    当然,您不必每次都从磁盘读取列表,因此会得到极大的提升,因为那是最耗时的操作。但是,如果您现在将"已缓存"列表变成一组(当然只有一次),您将获得另一个提升。

    谁能告诉我这是否支持日语?

    它给了我这个UnicodeWarning:Unicode相等比较无法将两个参数都转换为Unicode-将它们解释为不相等的text = .join([如果不是stop_words中的单词,则为text.split()中的单词)] Salomone为我提供了解决方案这个

    它也可以与pandas数据帧一起使用吗(加速)df[column]=df[column].apply(lambda x: [item for item in x if item not in cachedStopWords])

    使用正则表达式删除所有不匹配的单词:

    1

    2

    3import re

    pattern = re.compile(r'\b(' + r'|'.join(stopwords.words('english')) + r')\b\s*')

    text = pattern.sub('', text)

    这可能比循环您自己快得多,特别是对于大型输入字符串。

    如果由此删除了文本中的最后一个单词,则您可能会有尾随空格。我建议分开处理。

    知道这有多复杂吗?如果w =我的文本中的单词数,而s =停止列表中的单词数,我认为循环将以w log s的顺序进行。在这种情况下,w约为s,因此其w log w。 grep会不会慢一些,因为它(必须)逐个字符地匹配?

    实际上,我认为O(...)含义的复杂性是相同的。两者都是O(w log s),是的。但是,正则表达式是在较低的级别上实现的,并且进行了优化。单词拆分已经导致复制所有内容,创建字符串列表以及列表本身,所有这一切都花费了宝贵的时间。

    首先,您要为每个字符串创建停用词。创建一次。集合确实在这里很棒。

    1forbidden_words = set(stopwords.words('english'))

    稍后,摆脱join内部的[]。请改用生成器。

    1' '.join([x for x in ['a', 'b', 'c']])

    替换为

    1' '.join(x for x in ['a', 'b', 'c'])

    接下来要处理的是使.split()产生值,而不是返回数组。 我相信regex在这里将是很好的替代品。 s>有关为什么s.split()确实很快的原因,请参见此内容。

    最后,并行执行此作业(删除6m字符串中的停用词)。那是一个完全不同的话题。

    我怀疑使用正则表达式会有所改进,请参见stackoverflow.com/questions/7501609/python-re-split-vs-split/

    刚刚发现它。 :)

    谢谢。 set至少使速度提高了8倍。为什么使用生成器有帮助? RAM对我来说不是问题,因为每段文本都非常小,大约100-200个字。

    实际上,我已经看到join在列表理解方面的性能要优于等效的生成器表达式。

    抱歉回复晚了。

    将会对新用户有用。

    使用集合库创建停用词词典

    使用该字典进行非常快速的搜索(时间= O(1)),而不要在列表上进行搜索(时间= O(停用词))

    1

    2

    3

    4from collections import Counter

    stop_words = stopwords.words('english')

    stopwords_dict = Counter(stop_words)

    text = ' '.join([word for word in text.split() if word not in stopwords_dict])

    与基于正则表达式的方法相比,确实确实可以大大加快速度。

    展开全文
  • 原博文2015-11-10 15:20 −python 去除停用词 结巴分词 import jieba #stopwords = {}.fromkeys([ line.rstrip() for line in open('stopword.txt') ]) stopwords = {}.f...相关推荐2016-07-18 13:47 −利用结巴分词...

    原博文

    2015-11-10 15:20 −

    python 去除停用词 结巴分词 import jieba #stopwords = {}.fromkeys([ line.rstrip() for line in open('stopword.txt') ]) stopwords = {}.f...

    相关推荐

    2016-07-18 13:47 −

    利用结巴分词来进行词频的统计,并输出到文件中。 结巴分词github地址:结巴分词 结巴分词的特点: 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词...

    comment.png

    0

    attention.png

    11378

    2014-03-12 11:13 −

    中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 对于未登录词,采用了基于汉字成词能力的HMM模型...

    comment.png

    0

    attention.png

    47497

    2017-05-18 19:07 −

    把语料从数据库提取出来以后就要进行分词啦,我是在linux环境下做的,先把jieba安装好,然后找到内容是build jieba PKG-INFO setup.py test的那个文件夹(我这边是jieba-0.38),把自己的自定义词典(选用,目的是为了分...

    comment.png

    13

    attention.png

    58714

    2014-07-14 23:58 −

    今天的任务是对txt文本进行分词,有幸了解到"结巴"中文分词,其愿景是做最好的Python中文分词组件。有兴趣的朋友请点这里。 jieba支持三种分词模式: *精确模式,试图将句子最精确地切开,适合文本分析; *全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; ...

    comment.png

    1

    attention.png

    12200

    2017-01-08 22:37 −

    python结巴(jieba)分词 一、特点 1、支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析。 (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。 (3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。...

    comment.png

    0

    attention.png

    14335

    2018-03-10 16:29 −

    中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。 分词模块jieba,它是python比较好用的分词模块。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预...

    2012-11-14 15:15 −

    转载地址http://www.iteye.com/news/26184-jieba 中文分词是中文文本处理的一个基础性工作,然而长久以来,在Python编程领域,一直缺少高准确率、高效率的分词组件。结巴分词正是为了满足这一需求。 在线演示:http://209.222.69.242:900...

    2017-03-18 15:05 −

    python中文分词:结巴分词 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。其基本实现原理有三点: 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合 对于未登录词,采...

    2017-12-01 10:57 −

    一、下载地址 1.https://github.com/fukuball/jieba-php 二、简介 “结巴”中文分词:做最好的PHP中文分词,中文断词组件。/“结巴”...

    2019-01-05 14:38 −

    结巴分词(自然语言处理之中文分词器) jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再采用了动态规划查找最大概率路径,找出基于词频的最大切分组合,对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法。 ...

    comment.png

    2

    attention.png

    4227

    展开全文
  • I am trying to process a user entered text by removing stopwords using nltk toolkit, but with stopword-removal the words like 'and', 'or', 'not' gets removed. I want these words to be present after ...

    1586010002-jmsa.png

    I am trying to process a user entered text by removing stopwords using nltk toolkit, but with stopword-removal the words like 'and', 'or', 'not' gets removed. I want these words to be present after stopword removal process as they are operators which are required for later processing text as query. I don't know which are the words which can be operators in text query, and I also want to remove unnecessary words from my text.

    解决方案

    I suggest you create your own list of operator words that you take out of the stopword list. Sets can be conveniently subtracted, so:

    operators = set(('and', 'or', 'not'))

    stop = set(stopwords...) - operators

    Then you can simply test if a word is in or not in the set without relying on whether your operators are part of the stopword list. You can then later switch to another stopword list or add an operator.

    if word.lower() not in stop:

    # use word

    展开全文
  • 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的。分词模块jieba,它是python比较好用的分词模块。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接...

    前言

    jieba 基于Python的中文分词工具,安装使用非常方便,直接pip即可,2/3都可以,功能强悍,十分推荐。

    中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。

    分词模块jieba,它是python比较好用的分词模块。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8

    支持三种分词模式

    1 精确模式,试图将句子最精确地切开,适合文本分析;

    2 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

    3 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

    # 精确模式 seg_list = jieba.cut("我去过清华大学和北京大学。")

    # 全模式 seg_list = jieba.cut("我去过清华大学和北京大学。", cut_all=True)

    # 搜索引擎模式 seg_list = jieba.cut_for_search("我去过清华大学和北京大学。")#精确模式: 我/ 去过/ 清华大学/ 和/ 北京大学/ 。

    #全模式: 我/ 去过/ 清华/ 清华大学/ 华大/ 大学/ 和/ 北京/ 北京大学/ 大学/ /

    #搜索引擎模式: 我/ 去过/ 清华/ 华大/ 大学/ 清华大学/ 和/ 北京/ 大学/ 北京大学/

    #coding=utf-8

    import jieba. analyse

    stopwords=[]

    for word in open("stopwords.txt","r"):

    stopwords.append(word.strip())

    article=open("1.txt","r").read()

    words=jieba.cut(article,cut_all=False)

    stayed_line=""

    for word in words:

    if word.encode("utf-8")not in stopwords:

    stayed_line+=word+" "

    print stayed_line

    w=open("2.txt","w")

    w.write(stayed_line.encode("utf-8"))

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

    本文标题: python使用jieba实现中文分词去停用词方法示例

    本文地址: http://www.cppcns.com/jiaoben/python/222254.html

    展开全文
  • 删除停止词Python

    2020-11-23 03:54:13
    在 既然您是python新手,请允许我分享一些想法 python是一种优雅的语言,其目的是简洁易读。我们能做的最困难的事情就是写显式for循环,除非必要的for循环几乎总是可以用listcomps或生成器表达式替换。用户定义函数...
  • Python 中文分词并去除停用词

    万次阅读 2019-09-29 14:42:20
    # 创建停用词list def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()] return stopwords # 对句子进行分词 def seg_senten...
  • python之路:列表及元组之定义 python开发之路:列表及元组之定义 列表是以后用处较大的一个数据类型,这种数据类型可以存储按组分类的信息.好了,我不多说,开始讲了! 好了,现在我有个情景,我要存东汉时期(韩国,秦国,...
  • 一、概念首先我们来看一下停用词的概念,然后来介绍使用nltk如何删除英文的停用词:由于一些常用字或者词使用的频率相当的高,英语中比如a,the, he等,中文中比如:我、它、个等,每个页面几乎都包含了这些词汇,...
  • 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的。分词模块jieba,它是python比较好用的分词模块。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接...
  • 对于一个由中文句子组成的列表,现在需要去除一切标点符号及数字,仅保留中文并将句子输出为列表。 sentence 0 巴林新增3例新冠肺炎确诊病例 累计确诊50例 1 稳外资外贸 中国这样做 2 工信部:每天保障湖北地区...
  • 上一篇文章介绍了利用python进行SEO词库去重,去重后需要对现有的词库进行去停止操作,这里我们主要利用到了jieba分词的搜索引擎模式cut_for_search() .去停止主要利用了停止词库进行去重set(jiebas)-set...
  • python停用词表

    2020-11-21 03:52:25
    stop_words:设置停用词表,这样的我们就不会统计出来(多半是虚拟,冠词等等),需要列表结构,所以代码中定义了一个函数来处理停用词表...前言前文给大家说了python机器学习的路径,这光说不练假把式,这次,...
  • hanlp的词典模式之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集。其核心词典形式如下:自定义词典自定义词典有多种添加模式,首先是...
  • 使用NLTK删除停用词

    2021-07-16 12:43:03
    I am trying to process a user entered text by removing stopwords using nltk toolkit, but with stopword-removal the words like 'and', 'or', 'not' gets removed. I want these words to be present after ...
  • 在读取停用此列表时遇到这行代码,记录理解过程: #读取停顿列表 stopword_list = [k.strip() for k in open('stopwords.txt', encoding='utf8').readlines() if k.strip() != ''] 这一行代码有点长,用到的pyth....
  • Python中文分词并过滤停用词

    千次阅读 2018-10-25 09:51:42
    中文分词并过滤停用词python代码如下。 #coding=utf-8 import jieba input_path='../data/train_pos_100.txt' output_path='../data/train_pos_100_seg.txt' stopwords_path='../data/stopwords1893_cn.txt' ...
  • 使用Python中的NLTK和spaCy删除停用词与文本标准化

    千次阅读 多人点赞 2019-09-08 23:46:32
    了解如何在Python删除停用词与文本标准化,这些是自然语言处理的基本技术 探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化(stemming)和词形还原(lemmatization) 在Python中使用NLTK,...
  • PYTHON3.6对中文文本分词、去停用词以及词频统计

    万次阅读 多人点赞 2017-09-28 18:33:51
    一点微小的文本预处理工作(涉及相关为:中文结巴分词、停用词处理、词频统计)
  • 我尝试了两种删除停用词的方法,但都遇到了问题:方法1:cachedStopWords = stopwords.words("english")words_to_remove = """with some your just have from it's /via & that they your there this into ...
  • 1 importjieba23 #创建停用词列表4 defstopwordslist():5 stopwords = [line.strip() for line in open('chinsesstoptxt.txt',encoding='UTF-8').readlines()]6 returnstopwords78 #对句子进行中文分词9 defseg_...
  • 利用python—jieba包进行分词和移除停用词python-jieba包进行分词和移除停用词只做了最基础的学习,不知道是这一部分本来就比较简单还是我学习的都是最基础部分,总之学习路上过于顺利了,下面我将介绍在这一...
  • 因为比赛需要用到结巴分词,所以写了一个关于结巴分词、词性标注以及停用词过滤的python程序。
  • ") f.close() #创建停用词 def stopwordslist(filepath): stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()] return stopwords # 对句子进行去除停用词 def seg_sentence...
  • python中怎样处理汉语的同义用结巴分词python中文分词:结巴分词中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词。其基本实现原理有三点:基于Trie树结构实现高效的图扫描,生成句子中汉字...
  • 英文使用空格来分开每个单词的,而中文单独一个汉字有时候完全不是同个含义,因此,中文分词相比英文分词难度高很多。分词主要用于NLP 自然语言处理(Natural Language Processing),使用场景有:搜索优化,...
  • # 创建停用词列表 def stopwordslist(): stopwords = [line.strip() for line in open(r'stopwords.txt',encoding='UTF-8').readlines()] return stopwords #扩展jieba分词词库 dict='fencibuchong.txt' jieba....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,649
精华内容 659
关键字:

python删除中文停用词

python 订阅