zoukankan      html  css  js  c++  java
  • SSIS高级转换任务—关键词抽取

    如果你曾经为网站做过单词或短语分析以便获得更好的搜索排名,你会对SSIS的这个任务很感兴趣。关键词提取任务是从文本流中查找并计算关键词的出现频率的工具。它可与接收任何形式的文本,输出两列:一列是关键词,另一列是这个关键词在文本中出现的频率的统计值。这个统计值可以是该关键词出现的次数,也可以是使用稍微复杂一点的计算公式(TFIDF)计算得出的几率值。缩写词TFIDF的全称是Term Frequency and Inverse Document Frequency,是一个用于计算单词或词组在在整个文本中出现的几率。下面是这个公式的表达式:

    TDIDF (of a term or phrase) = (frequency of term) * log((# rows in sample)/(# rows with term or phrase))

    这里我们讨论的关键词提取任务使用SSIS组件内嵌的算法和公式计算得到提取结果,我们自己不能修改内部的算法逻辑,它是由别人设计好的,但是可以配置一些选项例如,如何分割关键词,统计名词还是名词词组。我们也可以根据提取行为调整这些配置。虽然在特定范围内提取,但是它还是提供一些预先定义的单词或词组时干扰项,这些干扰次货词组不予统计在最终结果之内。经过几次测试调整就可以产生一个非常有价值的统计结果。

    在使用之前也许会思考它的使用场合,例如数据仓库内保存类一个客户服务系统中的一个数据列,它存储的是客户的建议和意见,如果使用这种任务来产生一个关键词统计结果是不是会很有用呢?我们可以很清楚地看出最大范围内客户不满意的地方,这就是使用关键词提取的一个很合适的场合。这里要求输入数据类型是ANSI(DT_WSTR)或者Unicode(DT_NTEXT)。如果不是这来年各种类型要使用Data Convertion来转换数据。最好的学习方法还是来实际操作一个例子,这个例子就是关于客户评价的。

    从生产环境中得到一个客户服务系统中的客户评价的数据列。为了简便起见我们将他们放在一个文本文件中。

    1. 使用下面内容创建一个文本文件,保存为c”\custsvc.txt

                    Ice maker in freezer stopped working model XX-YY3

                    Door to refrigerator is coming off model XX-1

                    Ice maker is making a funny noise XX-YY3

                    Handle on fridge falling off model XX-Z1

                    Freezer is not getting cold enough XX-1

                    Ice maker grinding sound fridge XX-YY3

                    Customer asking how to get the ice maker to work model XX-YY3

                    Customer complaining about dent in side panel model XX-Z1

                    Dent in model XX-Z1

                    Customer wants to exchange model XX-Z1 because of dent in door

                    Handle is wiggling model XX-Z1

    1. 创建一个包命名为TermExtractionExample,拖放一个Data Flow task,双击进入Control Flow 设计界面
    2. 拖放一个Flat File Connection,连接上述文件,将输出列的列名修改为CustSvcNote。OutputColumnWidth设置为100。添加一个Flat File DataSource,使用上面建立的文件数据源
    3. 我们可以看到Flat File DataSource的输出数据类型是DT_STR,这里需要将数据类型转换成DT_WSTR或者DT_NTEXT。添加一个Data Conversion Transform,将Flat File DataSource和它连接起来设置Input  Column为CustSvcNote,输出别名为ConvCustSvcNote,数据类型为DT_WSTR
    4. 添加一个Term Extraction task,将Data Conversion Transform和它连接起来,打开编辑界面,如图1显示输入列和两个有默认列名的输出列,这里也可以修改输出列的列名,这里我们选择ConvCustSvcNote因为它被转换成Unicode String,如果你选择了CustSvcNote,将会得到下面的验证提示:The input column can only have DT_WSTR or DT_NTEXT as its data type.

      图1
    5. 关闭编辑界面,忽略关于错误输出的警告。
    6. 新建一个OLE DB Destination,将Term Extraction task和它连接起来,将它连接上数据库AdventureWorks
    7. 点击新建一个表使用下面的语句创建新表。
      CREATE TABLE [TermResults] ([Term] NVARCHAR(128),[Score] DOUBLE PRECISION)
    8. 点击Mappings ,查看映射关系。
    9. 在Term Extract Transformation和OLE DB Destination之间添加一个Data View,运行这个package。运行过程中将会停止并在DataView中显示执行结果。可以看到一组单词和他们的统计值。这里我们默认设置,所以score列显示的是关键词出现的次数,点击Advanced标签,如图2,查看高级设置。

      图2
    10. 高级标签被分成四个部分。
      Term Type:设置输入流应该如何划分。Noun将只统计名词,Noun Phrases将只统计名词词组,Noun and Noun Phrases将这二者都统计。
      Score Type :使用Frequence或者TFIDF算法统计。
      Parameters:次数门槛表示设置表示至少出现2次才会被统计出来。最大长度表示单词最大字母的个数必须小于12。
      配置不同得到的结果也会不同,下图3显示不同的配置得到的不同结果。

      图3

    这里注意到Term Type设置为Both的时候“model XX-Z1”统计了3次,但是我们在文本中查看发现它出现了5次,如果设置Term  Type为nouns的时候会统计5次。这也说明名词词组可能不会被正确地统计。

    在图3的统计结果中我们也可以看到“model”,“model XX-Z1”,“model XX-YY3”,“ice maker”,“dent”,“customer”出现的频率较高,这里也可以假设模型XX-Z1,XX-YY3有可能出现了问题,需要检查一下。

    在这个结果中我们也看到一些名词并不是我们感兴趣的,例如model,customer。也可以将这些干扰单词舍弃。使用Exclusion标签内的设置可以达到这个目目的。如图6-20显示了配置结果,保存后查看结果。下面是新建TermExclusions表的语句和,表中的 数据只有两行model和customer。
      CREATE TABLE [dbo].[TermExclusions](
       [Term] [nvarchar](128) NULL
      ) ON [PRIMARY]

    图4

    最后TermResults表中的结果如图5,图中显示的单词出现的次数,如果在Advanced中选择的是TFIDF,那么这里的结果将是一个类似0.213这样的小数。

    图5

    我们还可以看到结果中“model XX-Z1”,“model XX-YY3”没有统计了,这是因为我们去除了“model” 。另外一种方法是使用一个关键词列表,在这个列表中添加一些想统计的关键词来干预统计结果,这就是另外一种task-关键词查找。


     

    作者:Tyler Ning
    出处:http://www.cnblogs.com/tylerdonet/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,请微信联系冬天里的一把火

  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/tylerdonet/p/2088387.html
Copyright © 2011-2022 走看看