Java 类名:com.alibaba.alink.operator.stream.nlp.RegexTokenizerStreamOp
Python 类名:RegexTokenizerStreamOp

功能介绍

通过正则表达式对文本进行切分或者匹配操作。

使用方式

文本列通过参数 selectedCol 指定,切分或者匹配用的正则表达式通过参数 pattern 指定。
当参数 gaps 为 True 时,对文本进行切分操作(类似于分词); 当参数 gaps 为 为 False 时,将提取匹配正则表达式的词语。
对于处理后的结果,还可以通过参数 minTokenLength 根据长度筛掉词语,或者通过参数 toLowerCase 将所有词语转为小写。

参数说明

| 名称 | 中文名称 | 描述 | 类型 | 是否必须? | 取值范围 | 默认值 | | —- | —- | —- | —- | —- | —- | —- |

| selectedCol | 选中的列名 | 计算列对应的列名 | String | ✓ | 所选列类型为 [STRING] | |

| gaps | 切分/匹配 | 如果gaps为True,pattern用于切分文档;如果gaps为False,会提取出匹配pattern的词。 | Boolean | | | true |

| minTokenLength | 词语最短长度 | 词语的最短长度,小于这个值的词语会被过滤掉 | Integer | | | 1 |

| outputCol | 输出结果列 | 输出结果列列名,可选,默认null | String | | | null |

| pattern | 分隔符/正则匹配符 | 如果gaps为True,pattern用于切分文档;如果gaps为False,会提取出匹配pattern的词。 | String | | | “\s+” |

| reservedCols | 算法保留列名 | 算法保留列 | String[] | | | null |

| toLowerCase | 是否转换为小写 | 转换为小写 | Boolean | | | true |

| numThreads | 组件多线程线程个数 | 组件多线程线程个数 | Integer | | | 1 |

代码示例

Python 代码

  1. df = pd.DataFrame([
  2. [0, 'That is an English Book!'],
  3. [1, 'Do you like math?'],
  4. [2, 'Have a good day!']
  5. ])
  6. inOp1 = BatchOperator.fromDataframe(df, schemaStr='id long, text string')
  7. op = RegexTokenizerBatchOp().setSelectedCol("text").setGaps(False).setToLowerCase(True).setOutputCol(
  8. "token").setPattern("\\w+")
  9. op.linkFrom(inOp1).print()
  10. inOp2 = StreamOperator.fromDataframe(df, schemaStr='id long, text string')
  11. op2 = RegexTokenizerStreamOp().setSelectedCol("text").setGaps(False).setToLowerCase(True).setOutputCol(
  12. "token").setPattern("\\w+")
  13. op2.linkFrom(inOp2).print()
  14. StreamOperator.execute()

Java 代码

  1. import org.apache.flink.types.Row;
  2. import com.alibaba.alink.operator.batch.BatchOperator;
  3. import com.alibaba.alink.operator.batch.nlp.RegexTokenizerBatchOp;
  4. import com.alibaba.alink.operator.batch.source.MemSourceBatchOp;
  5. import com.alibaba.alink.operator.stream.StreamOperator;
  6. import com.alibaba.alink.operator.stream.nlp.RegexTokenizerStreamOp;
  7. import com.alibaba.alink.operator.stream.source.MemSourceStreamOp;
  8. import org.junit.Test;
  9. import java.util.Arrays;
  10. import java.util.List;
  11. public class RegexTokenizerStreamOpTest {
  12. @Test
  13. public void testRegexTokenizerStreamOp() throws Exception {
  14. List <Row> df = Arrays.asList(
  15. Row.of(0, "That is an English Book!"),
  16. Row.of(1, "Do you like math?"),
  17. Row.of(2, "Have a good day!")
  18. );
  19. BatchOperator <?> inOp1 = new MemSourceBatchOp(df, "id int, text string");
  20. BatchOperator <?> op = new RegexTokenizerBatchOp().setSelectedCol("text").setGaps(false).setToLowerCase(true)
  21. .setOutputCol("token").setPattern("\\w+");
  22. op.linkFrom(inOp1).print();
  23. StreamOperator <?> inOp2 = new MemSourceStreamOp(df, "id int, text string");
  24. StreamOperator <?> op2 =
  25. new RegexTokenizerStreamOp().setSelectedCol("text").setGaps(false).setToLowerCase(true)
  26. .setOutputCol("token").setPattern("\\w+");
  27. op2.linkFrom(inOp2).print();
  28. StreamOperator.execute();
  29. }
  30. }

运行结果

批运行结果

| id | text | token | | —- | —- | —- |

| 0 | That is an English Book! | that is an english book |

| 1 | Do you like math? | do you like math |

| 2 | Have a good day! | have a good day |

流运行结果

| id | text | token | | —- | —- | —- |

| 0 | That is an English Book! | that is an english book |

| 2 | Have a good day! | have a good day |

| 1 | Do you like math? | do you like math |