在Rapidminer中从内容中提取主题标签

时间:2016-03-16 00:00:17

标签: regex hashtag rapidminer

我在csv文件中有一些推文数据,我想(1)只提取主题标签(如## cloudcomputing,#cloud_computing,#101Cloud等特殊字符,并将多个案例表示视为#edtech等一个标签,#Edtech,#EdTech等),(2)基于主题标签对推文进行分组,以及(3)计算每个主题标签单词在文档中或跨语料库文档中出现的次数。我知道我必须在' Title'的过滤器示例运算符中使用正则表达式。专栏,但不知道如何。 我尝试使用但失败的一些正则表达式是:属性名称(标题)=正则表达式 (?一世)#。* ^# /(#\ W +)/ U /(#[A-Z0-9] [A-Z0-9 -_] *)/ IG 这是我创建的进程的XML代码的链接 https://myexplorations.sharefile.com/d-sefddef555cf4d61a 这是源数据文件的链接 https://myexplorations.sharefile.com/d-s92197963830466cb 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这两个文件都是XML格式,但不是标准的RapidMiner格式,其中一个看起来有点像MS Word,是吗?

无论如何,请随意以不同的格式重新发布数据,但我认为这可能会有所帮助。 首先确保您拥有RapidMiner的文本处理扩展。

接下来使用来自数据的流程文档及其内部使用以下3个操作符:转换案例,剪切文档和合并文件。这些对CSV中的每个示例的作用是使文本小写,从文本和文本中单独提取主题标签。然后将它们组合成一个新文档(如果一段文本中有多个主题标签) 我使用的regEx是(?i)#[0-9a-z _] * ,这只是为了速度,但它应该捕获我能想到的所有情况。
此过程的输出是整个语料库中的词汇表计数,告诉您文档中出现的主题标签的次数。这应该让你开始。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process version="7.0.001">
  <context>
    <input/>
    <output/>
    <macros/>
  </context>
  <operator activated="true" class="process" compatibility="7.0.001" expanded="true" name="Process">
    <process expanded="true">
      <operator activated="true" class="read_csv" compatibility="7.0.001" expanded="true" height="68" name="Read CSV" width="90" x="45" y="136">
        <parameter key="csv_file" value="myCSV"/>
        <parameter key="column_separators" value=","/>
        <list key="annotations"/>
        <list key="data_set_meta_data_information">
          <parameter key="0" value="myTextColum.true.text.regular"/>
          <parameter key="1" value="anotherColumn.true.nominal.regular"/>
        </list>
      </operator>
      <operator activated="true" class="text:process_document_from_data" compatibility="7.0.000" expanded="true" height="82" name="Process Documents from Data" width="90" x="179" y="85">
        <parameter key="vector_creation" value="Term Occurrences"/>
        <list key="specify_weights"/>
        <process expanded="true">
          <operator activated="true" class="text:transform_cases" compatibility="7.0.000" expanded="true" height="68" name="Transform Cases" width="90" x="45" y="34">
            <description align="center" color="transparent" colored="false" width="126">Makes everything lowercase</description>
          </operator>
          <operator activated="true" class="text:cut_document" compatibility="7.0.000" expanded="true" height="68" name="Cut Document" width="90" x="179" y="34">
            <parameter key="query_type" value="Regular Expression"/>
            <list key="string_machting_queries"/>
            <list key="regular_expression_queries">
              <parameter key="hashtags" value="(?i)#[0-9a-z_]*"/>
            </list>
            <list key="regular_region_queries"/>
            <list key="xpath_queries"/>
            <list key="namespaces"/>
            <list key="index_queries"/>
            <list key="jsonpath_queries"/>
            <process expanded="true">
              <connect from_port="segment" to_port="document 1"/>
              <portSpacing port="source_segment" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
            <description align="center" color="transparent" colored="false" width="126">Gets rid of everything but the hashtags</description>
          </operator>
          <operator activated="true" class="text:combine_documents" compatibility="7.0.000" expanded="true" height="82" name="Combine Documents" width="90" x="313" y="34"/>
          <connect from_port="document" to_op="Transform Cases" to_port="document"/>
          <connect from_op="Transform Cases" from_port="document" to_op="Cut Document" to_port="document"/>
          <connect from_op="Cut Document" from_port="documents" to_op="Combine Documents" to_port="documents 1"/>
          <connect from_op="Combine Documents" from_port="document" to_port="document 1"/>
          <portSpacing port="source_document" spacing="0"/>
          <portSpacing port="sink_document 1" spacing="0"/>
          <portSpacing port="sink_document 2" spacing="0"/>
        </process>
      </operator>
      <connect from_op="Read CSV" from_port="output" to_op="Process Documents from Data" to_port="example set"/>
      <connect from_op="Process Documents from Data" from_port="example set" to_port="result 1"/>
      <connect from_op="Process Documents from Data" from_port="word list" to_port="result 2"/>
      <portSpacing port="source_input 1" spacing="0"/>
      <portSpacing port="sink_result 1" spacing="21"/>
      <portSpacing port="sink_result 2" spacing="0"/>
      <portSpacing port="sink_result 3" spacing="0"/>
    </process>
  </operator>
</process>