【问题标题】:How to break line into known words如何将行换成已知单词
【发布时间】:2014-01-09 18:14:11
【问题描述】:

我需要将一行字符串分成不同的列到excel中。这是我得到的输入。

输入

  • 37006 II 学期 P.G.临床研究和临床数据管理考试文凭,2012 年 7 月/8 月制药法规事务时间:最多 3 小时。分数:100

输出:带有结构的 CSV 记录(代码、Sem/Year、主题、课程、考试日期、时间、分数)

  • 37006,第二学期,PG临床研究和临床数据管理文凭,制药法规事务,2012 年 7 月/8 月,3 小时,100

我有不同集合中的数据,这些数据构成了上述行。例如:

语法(这是一个数组/字典):

  • 学期[I,II,III,IV,V,VI,VII,VIII,IX,X,1,2,3,4,5,6,7,8,9,10]
  • 年[I,II,III,IV,V,VI,VII,VIII,IX,X,1,2,3,4,5,6,7,8,9,10]
  • 主题[P.G.临床研究和临床数据管理文凭,法学学士]
  • 课程[医药法规事务、法律 - 法学]
  • 考试日期[ 2012 年 7 月/8 月,1 月/2 月。 2013]
  • 时间[3小时]
  • MaxMarks[30,40,50,60,70,80,90,100]

仅供参考,

  • 我不确定是否可以使用任何分隔符来打破它,因为它具有高度不可预测性或可靠性。
  • 我不确定文本在每一行中的顺序是否相同,或者没有固定长度、汽车或单词

我的假设是,逐字阅读并尝试与我拥有的任何数组中的任何单词匹配。如果它与任何单词匹配,则将该单词归为下降类别并添加到excel中的相关列中。

在这里,我知道如何处理数据和所有内容,但优化/最佳方式除外 了解每个单词属于哪个类别。

有没有词法分析专家可以分享一下这方面的一些想法?

【问题讨论】:

    标签: excel text-parsing lexical-analysis lexical


    【解决方案1】:

    你应该使用正则表达式来匹配这种复杂的文本模式。

    【讨论】:

    • 这里的数据不是 1 行或 10 行。它大约有 2000 行,语法太大,构成了所有 200 行。我如何使用正则表达式来匹配这个庞大的数据。
    • 您可以尝试为每一行应用单个正则表达式(包含您分配的 7 个词法)。
    • ^/d+\s((/d{1,2}|X|IX|VIII|VII|VI|V|IV|III|II|II)\sSemester)\s ... $ 是第一个词法的示例:学期。
    • 在年/学期的情况下,其作为搜索条件的范围很小。但是如果让我们说主题/课程,标准就像我认为的 200 种可能性。并且 tere 是没有分隔符的主题,一个学期以单词 term 结尾。如何用正则表达式来解决问题
    • 在您给定的示例中,考试日期紧随主题之后,时间紧随课程之后。由于科目和课程很难匹配,您可以编写 before-date-and-after-semester-logic。使其匹配日期和学期之间的所有内容。
    【解决方案2】:

    请看一下 ANTLR 这样的词法分析器。如果您了解 Java 或其他能够阅读正则表达式的语言,那么经过一个下午(或一周)的折磨后,您将能够轻松解析这些语言。您也可以用 Java 编写正则表达式,但我会建议您使用 ANTLR 接口,您可以在 Eclipse 中使用该接口。它将向您展示如何解析这些行。

    让 ANTLR 或 Java 的输出写出一个 CSV 文件。 CSV 将成为您将数据输入 Excel 电子表格的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多