【问题标题】:Get phrases with 3 words获取包含 3 个单词的短语
【发布时间】:2018-07-18 14:09:08
【问题描述】:

我已经尝试解决这个问题一段时间了。

我想获取一个大文本/字符串并将其拆分为 3 个单词的短语,然后将它们添加到一个数组中。

我尝试过使用spilt(),但它并没有像我希望的那样工作。

我想做什么,让它发挥作用:

从字符串中的前 3 个单词开始,当我得到这些单词时,我将其放入一个数组中并移动 1 个单词并取接下来的 3 个单词,依此类推。

这是一种不好的做法吗?

亲切的问候:)

【问题讨论】:

  • 有各种 NLP 包提供三元组解析 - 例如nltk。使用其中之一将为您节省一些精力。 (如果您想自己实际构建一个三元语法分析器,请提供一个具体的示例,包括如何处理标点符号、数字等边缘情况以及预期输出。)
  • 感谢 @andrew_reece 提供有关 NLTK 的信息,在某些时候我将改变我这样做的方式,现在我只是想做出最简单的解决方案。

标签: python text words


【解决方案1】:
my_really_long_string = "this is a really long string"
split_string = my_really_long_string.split()
phrase_array = [" ".join(split_string[i:i+3]) for i in range(len(split_string) - 2)]

第一行只代表你的字符串。

之后,只需按空格分开,假设您只关心定义单词的结尾。 (@andrew_reece 关于边缘情况的 cmets 非常相关。)

下一个在 0 到 n-2 的范围内迭代,其中 n 是字符串的长度。它从 split_string 数组中取出 3 个连续的单词,并用空格将它们连接起来。

这几乎肯定不是最快的处理方式,因为它有拆分和连接,但它非常简单。

>>> my_really_long_string = "this is a really long string"
>>> split_string = my_really_long_string.split()
>>> phrases = [" ".join(split_string[i:i+3]) for i in range(len(split_string) - 2)]
>>> 
>>> phrases
['this is a', 'is a really', 'a really long', 'really long string']
>>> 

【讨论】:

  • 谢谢 :) 这正是我所需要的。现在我只需要从 tekst 中删除所有逗号、标点符号等,所以我只能得到干净的文本。非常感谢斯科特,非常感谢
【解决方案2】:

这会奏效。您可能想先去除字符文本,不确定您的数据是什么。

x = 'alt bot cot dot eat fat got hot iot jot kot lot mot not'
x = [y for y in [x.strip().split(' ')[i:i+3] for i in range(0, len(x), 3)]]

【讨论】:

  • 感谢您的输入 :) 我现在可以正常工作了,现在我只需要清理我得到的 html 了FB?, har kigget men ikke fundet nogle endnu.
  • 与我的不同之处在于它产生了一个列表列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多