御宅童子 2023-07-07 17:15 采纳率: 33.3%
浏览 16

有啥能像jieba一样把一段英文句子拆成几组相关的词组吗?

比如说 this is a good test,我要提出来 “this” “is ” “a ” “good test”。在处理一个文本要进行对高频词进行提取时,会出现有大量单一个存在没有什么参考价值的名词,这时候往往就要带上前面的形容词。但是nltk库貌似只能实现把句子拆成每一个单词,有无想jieba那样的英文词语识别组合的工具可以解决这个问题?如果没有,那如何实现我想要的效果。谢谢佬们了

  • 写回答

1条回答 默认 最新

  • 杨得江-君临天下wyj 2023-07-07 17:28
    关注

    在语料库语言学中,为了得到词表,有时需要把英文切分成列表。这时就需要对字符串中的标点进行处理。

    本人经过探索发现了三种不错的方法,供大家参考使用。

    一、maketrans法
    这种方法的原理就是导入string中的punctuation,然后利用maketrans建立起一个映射字典,均指向一空格键名。再通过str.translate()清除掉文本中的所有标点符号并替换为空格。

    然后利用split()的方法,把字符按照空格来切分,这样所有的单词都会切分出来,不会出现单词和标点连在一起的情况了。

    from string import punctuation as punct #引入punctuation模块,给它起个别名:punct s="Hello! Life is short, and I like Python. Do you like it?" # 设定要替换的字符串 transtab=str.maketrans({key:" " for key in punct}) #生成映射字典,把所有标点映身为空格 s1=s.translate(transtab) # 批量映射后,把结果赋值给s1 print(s1)
    显示结果如下:

    maketrans切分法
    二、re.split()切分法
    和第一种方法类似,我们先导入string中的punctuation,获取标点符号的字符串,然后我们利用re.split(‘[,.!]’,string)的切分方法,再加入一个空格。最后,再利用列表推导式来去除原结果中的空元素。

    import re from string import punctuation as punct #引入punctuation模块,给它起个别名:punct # s="Hello! Life is short, and I like Python. Do you like it? Do" # 设定要替换的字符串 text = re.split("[{} ]".format(punct),s) print([i for i in text if i!=""])
    re.split切分法
    结果与第一种方法一样。

    三、NLTK中的word_tokenize()法
    这种方法需要导入自然语方处理工具包NLTK,然后利用其中的word_tokenize这个分词工具进行分词,接着再用列表推导式去除标点符号。代码如下:

    from nltk import word_tokenize s="Hello! Life is short, and I like Python. Do you like it? Do" # 设定要替换的字符串 print([i for i in word_tokenize(s) if i.isalpha()])
    最终结果展示:

    word_tokenize()切分单词
    四、学后反思

    1. 在实际操作中以上方法还存在一些问题。比如有些文本中的题目后面没有标点,所以切分规则里要加上【\n】,另外还有一些Dr. etc.这些词需要加入例外,这样切分时会保留标点符号。更为细致的分词我们后续可以继续探讨。

    2. 以上方法中NLTK法需要安装nltk工具包,速度有点儿慢,配置上有点儿麻烦。maketrans法比较不太好理解,相比之下re.split()方法简单实用,可以随意添加规则,推荐大家使用。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月7日

悬赏问题

  • ¥15 关于树的路径求解问题
  • ¥15 yolo在训练时候出现File "D:\yolo\yolov5-7.0\train.py"line 638,in <module>
  • ¥30 戴尔inspiron独显直连
  • ¥15 进行一项代码设计遇到问题
  • ¥15 Mutisim中关于74LS192N计数器芯片设计(计数器)
  • ¥50 fastadmin后台无法删除文件
  • ¥15 oracle查询Socket read timed out错误
  • ¥15 matlab支持向量机使用错误
  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口