【问题标题】:Create Array of found words in Python在 Python 中创建找到的单词数组
【发布时间】:2014-05-16 00:35:20
【问题描述】:

我有一个文本消息和一个术语列表。我想创建一个数组来显示在消息中找到了哪些术语。例如:

message = "the quick brown fox jumps over the lazy dog"
terms = ["quick", "fox", "horse", "Lorem", "Ipsum", "the"]

result = idealMethod(message, terms)
=>   [1,1,0,0,0,1] 

因为“快速”是术语列表中的第一项,并且在消息中,结果中的第一个位置也是 1。这是另一个例子:

message2 = "Every Lorem has a fox"
result2 = idealMethod(message2, terms)
=> [0,1,0,1,0,0]

更新: 这些术语需要完全匹配。例如,如果我的搜索词包含 sam 我不想匹配 same

【问题讨论】:

  • 大概想看看python NLTK
  • 您是在使用 0 和 1 作为布尔值,其中 1 仅表示出现的术语,还是在寻找计数?也许添加这条消息作为示例会有所帮助:"The quick fox beat the slow fox in a race".
  • @Matthew 的 0 和 1 代表已找到和未找到。我会更新问题以澄清

标签: python search text data-analysis


【解决方案1】:

您可以使用列表理解和利用事实,即 True 在数字上下文中被评估为 1

words = set(message.split())
result = [int(term in words) for term in terms]
Out[24]: [1, 1, 0, 0, 0]

EDIT 更改为仅查找整个单词匹配,经过澄清。

【讨论】:

  • 这会很困难,例如"foxglove"message
  • @jonrsharpe 取决于定义,如果术语 fox 是否在 foxglove 中......除了 OP 明确声明的内容之外,我没有做出任何断言。他想要信息中的术语,而不是信息中的文字。
  • 我需要找到完全匹配的。此方法将查找文本的部分匹配项。即:“sam”的术语将匹配“same”“sample”和“besame”
  • 已修复。这使它与@jonsharpe 的答案几乎相同;)
【解决方案2】:

我想你想要:

words = set(message.split(" "))
result = [int(word in words) for word in terms]

请注意,split() 默认会在空格上拆分,因此您可以省略 " "

【讨论】:

  • 你可以使用message.split()
  • @jterrace 是,但使用set 会删除重复项并使in 检查更快
  • 不,我是说使用set(message.split()) - 默认情况下在空格上分割
  • @jonrsharpe 查看'first second third'.split(' ') 的结果,这和split() 不一样
  • @m.wasowski jonrsharpe 是第一个。谢谢大家
猜你喜欢
  • 2023-01-18
  • 2012-07-07
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2017-06-15
  • 2020-04-14
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多