使用R对文本进行文本挖掘并提取单词

时间:2018-04-18 13:29:25

标签: r grep substring text-mining grepl

之前我问过类似的问题,但我仍然需要一些帮助/指出正确的方向。

我试图找到一个列中的某些单词,这些单词包含所有行上的SQL语句,并提取R studio中的下一个单词。

示例:让我们调用此数据框" SQL

      |    **UserID**    |      **SQL Statement** 

 1   |    N781          |   "SELECT A, B FROM Table.1 p JOIN Table.2 pv ON 
                            p.ProdID.1ProdID.1 JOIN Table.3 v ON pv.BusID.1 = 
                            v.BusID WHERE SubID = 1 ORDER BY v.Name;"

2      |  N283          |   "SELECT D, E FROM Table.11 p JOIN Table.2 pv ON 
                           p.ProdID.1ProdID.1 JOIN Table.3 v ON pv.BusID.1 = 
                           v.BusID WHERE SubID = 1 ORDER BY v.Name;"

所以我试图取出表名。所以我试图找到" From"和#34;加入"并拉下一个表名。

我在前面的帮助下使用了一些代码:

我制作专栏" SQL语句"在2个名称" b"

的列表中

我使用代码:

z <- mapply(grepl,"(FROM|JOIN)",b)

为每个列表中的每个单词提供了一个True和fasle。

z <- mapply(grep,"(FROM|JOIN)",b)

以上情况很接近。它给了我每个列表中每场比赛的位置。

但我只是想找到“加入”或“来自”一词并取出文字。我试图获得类似

的输出
      |    **UserID**    |      **SQL Statement**                                | Tables 

 1   |    N781          |   "SELECT A, B FROM Table.1 p JOIN Table.2 pv ON       | Table.1, Table.2          
                            p.ProdID.1ProdID.1 JOIN Table.3 v ON pv.BusID.1 =       
                            v.BusID WHERE SubID = 1 ORDER BY v.Name;"

2      |  N283          |   "SELECT D, E FROM Table.11 p JOIN Table.2 pv ON 
                           p.ProdID.1ProdID.1 JOIN Table.3 v ON pv.BusID.1 =    | Table.11, Table.31 
                           v.BusID WHERE SubID = 1 ORDER BY v.Name;"

1 个答案:

答案 0 :(得分:0)

这是一个使用基本R选项的工作脚本。这里的灵感是利用strsplit在关键字FROMJOIN上拆分查询字符串。然后,每个结果术语的第一个单独的单词(第一个术语除外)应该是表名。

sql <- "SELECT A, B FROM Table.1 p JOIN Table.2 pv ON 
        p.ProdID.1ProdID.1 JOIN Table.3 v ON pv.BusID.1 = 
        v.BusID WHERE SubID = 1 ORDER BY v.Name;"

terms <- strsplit(sql, "(FROM|JOIN)\\s+")

out <- unlist(lapply(terms, function(x) gsub("^([^[:space:]]+).*", "\\1", x)))

out <- out[2:length(out)]
out

[1] "Table.1" "Table.2" "Table.3"

Demo

为了更好地理解我的所作所为,请按照演示进行操作,看看分割后产生的terms列表。

修改

以下是另一个演示的链接,该演示展示了如何在查询字符串向量上使用上述逻辑,为每个查询生成表向量列表

Demo