从字符串中提取 2 条信息 - 使用什么?

数据挖掘 文本挖掘 信息检索 训练 文本
2021-10-01 20:22:45

首先,我是数据科学方面的新手,我不是要求完整的解决方案,而是关于我应该阅读什么来完成我的任务的一些指导(使用哪些算法、技术等来解决类似的问题) .

我有不同的字符串列表,其中包含我想提取的一两个有用信息。下面是一个示例,我需要从每行中提取粗体和斜体部分。不过,这只是一个示例,最终我将需要一个可以应用于具有不同上下文的不同列表的过程。这是 500 个列表中的一个小样本:

  • 50"索尼 KDL 50W756CSAEP智能 LED 全高清
  • 55"三星 UE55JU6400智能 LED 高清
  • LG 55LF652V 55" 智能 3D 全高清
  • 日立 55HGW69 55'' LED 超智能 WIFI
  • 电视 65"三星 UE65KS7500 4K LED 智能

在我的完整列表中,我已经手动提取了品牌型号所以我现在需要一种方法来自动化包含更多品牌和型号的新列表的过程。我认为我可以启发式地进行此操作,但由于我不只是针对此类数据执行此操作,因此效果不佳。

那么有人可以给我一些建议吗?

谢谢!

4个回答

也许您可以将 Python 与字典一起使用。

您可以在字典中设置一组单词,每次可以用您找到的新单词填充。

要查找新词(如果模式与您的示例相同),您可以抓住“品牌”(三星),下一个词将是型号(UE65KS7500)。

这是一个很好的资源

我会通过以下方式解决这个问题 -

  1. 拆分字符串中的所有单词
  2. 使用正则表达式^[a-zA-Z0-9]*$仅获取字母数字字符。这是模型。
  3. 正则表达式之前的词是品牌名称的一部分。

解释:

^在行首断言位置 *量词 - 在零次和无限次之间匹配,尽可能多次,根据需要返回(贪婪) $在行尾断言位置

我喜欢先简单地做事,然后在需要时添加更多复杂性。我会先简单地删除我们不关心的电视功能,然后假设品牌总是先于模型返回剩下的东西。以 Python 为例:

def get_brand_model(input):
  """
  Returns the brand and model number from a TV description

  >>> get_brand_model('50" Sony KDL 50W756CSAEP Smart LED Full HD')
  ('SONY', 'KDL 50W756CSAEP')

  >>> get_brand_model('55" Samsung UE55JU6400 Smart LED HD')
  ('SAMSUNG', 'UE55JU6400')

  >>> get_brand_model('LG 55LF652V 55" SMART 3D FULL HD')
  ('LG', '55LF652V')

  >>> get_brand_model("HITACHI 55HGW69 55'' LED ULTRA SMART WIFI")
  ('HITACHI', '55HGW69')

  >>> get_brand_model('TV 65" SAMSUNG UE65KS7500 4K LED Smart')
  ('SAMSUNG', 'UE65KS7500')
  """

  def filter(word):
    # Basic filter to remove TV features from the input string
    skip_words = ['3d', '720p', '1080p', 'hd', '4k', 'smart', 'wifi',
                  'led', 'full', 'tv', 'ultra', 'inch']

    is_measurement = '"' in word or "'" in word

    return not word.lower() in skip_words and not is_measurement 

  words = [w.upper() for w in input.split(' ') if filter(w)]

  # Return a tuple of (brand, model number)
  return (words[0], ' '.join(words[1:]))

这可能需要一些调整,但问题中的 5 个示例在运行包含的 doctest 时都通过了。

您还可以合并 TF-IDF,以查看您打算提取的元素或您可以删除的元素是否存在共同词频。