【问题标题】:Determine whether in two rows one is a header or not确定两行中的一个是否为标题
【发布时间】:2018-12-20 17:12:21
【问题描述】:

我正在尝试执行一项人类很容易完成的任务:检测两行中的第一行是否是标题行。以下是示例输入示例:

示例 1:是的

name,age
bob,12

示例 2:是的

first,last
bob,jones

示例 3:否

1,2
8,hi

示例 4:否

bob,jones
tom,smith

我有点不知道从哪里开始进行有根据的猜测。它不一定是完美的(80% 就可以了),但是什么是确定上述情况的好的速记算法呢?我正在考虑的一些事情:

# header is usually always strings (wrong in case 4)
for val in header:

    is val.replace(',','').replace('.','').replace('-','').isdigit():
        header = False
    else:
        header = True

【问题讨论】:

  • 测试每个值的第一个字符是否是字母就足够了吗?我在想is_header = all(str(v)[0].isalpha() for v in header)
  • @JoeHalliwell 这是个好主意,是的。您是否认为还有其他好的标准来测试某些内容是否也是标题行?

标签: python python-3.x algorithm nlp


【解决方案1】:

一种方法是在您的行中预先设置要搜索的关键字列表;如['name', 'age', 'first', 'last']。当然,这应该是您的数字检查的补充。
如果您有一个或多个匹配项,则将其称为标题。

【讨论】:

  • 谢谢,虽然我正在寻找一种更通用的方法——例如,在解析文件之前我不知道标题名称。
  • @David542 我的想法是,作为人类,我们已经有了这个列表或术语。我们知道某些词(姓名、年龄...)代表类别而不是类别中的单个项目。当您查看表格并阅读元素时,您会立即确定每个项目的含义并将其放入正确的类别中。这就是我提到的预设列表的目的。
【解决方案2】:

似乎单词是数据标题中的常用名词。您可以使用一些 NLP 框架,例如 TextBlob 来做 POS(词性)工作来识别一个单词,如果它是一个名词或一个人名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    相关资源
    最近更新 更多