好的,这是我的输入
产品名称
机械
大型机械
农业机械
苹果汁
果汁机
软件开发
业务发展
软件许可
鸡蛋
...
Productname 可以是任何长度不同的字符串 - Min(Length()) 实际上是 3,但假设 Max(Length()) 可以是从 15 到 50(?) 的任何值。
我需要的是
a) 从上面的源列表中提取所有可能的 6-gram(将其保存在某个地方?) b) 查看这些 6-gram 中的每一个在源列表中出现的频率
一) “机械” “机器” “奇纳” “希内里” “内里”, “纳里” “埃里,B” “里,比” ... “艾森西” “普查辛” “感” “鸡蛋”
b) 基本上,SELECT <6-gram> AS gram, COUNT(*) FROM products WHERE Productname like '%<6-gram>%' (或者也许使用 JOIN,如果克存储在不同的表中)
我可以使用 TJava 组件和 GlobalVar Set 对象(有点像这里看到的: http://bekwam.blogspot.de/2012/08/iterating-over-java-collection-with.html )来做到这一点,一次将一个字符串放入 TJava 组件中并制作一组所有可能的 6-grams,然后可以对其进行处理。 (设置,因为我不需要重复项)
有没有更简单、更好的方法来做到这一点?最好没有 TJava 组件?我 99% 的时间都使用 Talend Open Studio 进行数据集成,也许其他组件可以做到这一点? 如果没有更好的方法来做到这一点,我如何在其他作业和项目中重用代码/通过允许选择 4-gram、5-gram、n-gram 使其更加动态。
这里提出了第一个问题,如果不够具体/英语不好/不够精确,请原谅我。欢迎批评
精选来自德国的问候 斯特凡
最佳答案
没有任何组件可以做到这一点,为了使您的代码可重用,只需使用 user routine ,它在项目中的任何作业中都是可见的。另一种方法是将其打包在 jar 文件中,并在需要时加载它 tLibraryLoad 。
要使代码动态化,您可以使用 context variables并将其传递给您的方法,如下所示:MyStaticRoutine.getNgrams(input,n);
关于java - 如何将字符串拆分为所有可能的 n 元语法/所有可能的 6 元语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903367/