CoreNLP API 用于带位置的 N-gram
CoreNLP API for N-grams with position
CoreNLP 是否有 API 用于获取带有位置等的 ngram?
比如我有一个字符串"I have the best car "。
如果我使用 mingrams=1 和 maxgrams=2。
我应该得到以下信息 below.I know stringutil with ngram function but how to get position.
(I,0)
(I have,0)
(have,1)
(have the,1)
(the,2)
(the best,2) etc etc
基于我传递的字符串。
非常感谢任何帮助。
谢谢
我在实用程序中没有看到任何内容。这里有一些示例代码可以提供帮助:
import java.io.*;
import java.util.*;
import edu.stanford.nlp.io.*;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.pipeline.*;
import edu.stanford.nlp.trees.*;
import edu.stanford.nlp.semgraph.*;
import edu.stanford.nlp.trees.TreeCoreAnnotations.*;
import edu.stanford.nlp.util.*;
public class NGramPositionExample {
public static List<List<String>> getNGramsPositions(List<String> items, int minSize, int maxSize) {
List<List<String>> ngrams = new ArrayList<List<String>>();
int listSize = items.size();
for (int i = 0; i < listSize; ++i) {
for (int ngramSize = minSize; ngramSize <= maxSize; ++ngramSize) {
if (i + ngramSize <= listSize) {
List<String> ngram = new ArrayList<String>();
for (int j = i; j < i + ngramSize; ++j) {
ngram.add(items.get(j));
}
ngram.add(Integer.toString(i));
ngrams.add(ngram);
}
}
}
return ngrams;
}
public static void main (String[] args) throws IOException {
String testString = "I have the best car";
List<String> tokens = Arrays.asList(testString.split(" "));
List<List<String>> ngramsAndPositions = getNGramsPositions(tokens,1,2);
for (List<String> np : ngramsAndPositions) {
System.out.println(Arrays.toString(np.toArray()));
}
}
}
您只需剪切并粘贴该实用方法即可。
这可能是一个有用的功能,所以我会把它放在我们的工作清单上。
只需花一些代码在scala中重写即可。它只是上面的代码将它更改为 scala。输出会像
NgramInfo(I,0)NgramInfo(I have,0)NgramInfo(have,1)NgramInfo(have the,1)NgramInfo(the,2)NgramInfo(the best,2)NgramInfo(best,3)NgramInfo(best car,3)NgramInfo(car,4)
下面是案例class
的方法
def getNgramPositions(items: List[String], minSize: Int, maxSize: Int): List[NgramInfo] = {
var ngramList = new ListBuffer[NgramInfo]
for (i <- 0 to items.size by 1) {
for (ngramSize <- minSize until maxSize by 1) {
if (i + ngramSize <= items.size) {
var stringList = new ListBuffer[String]
for (j <- i to i + ngramSize by 1) {
if (j < items.size) {
stringList += items(j)
ngramList += new NgramInfo(stringList.mkString(" "), i)
}
}
}
}
}
ngramList.toList
}
case class NgramInfo(term: String, termPosition: Int) extends Serializable
谢谢
CoreNLP 是否有 API 用于获取带有位置等的 ngram?
比如我有一个字符串"I have the best car "。 如果我使用 mingrams=1 和 maxgrams=2。 我应该得到以下信息 below.I know stringutil with ngram function but how to get position.
(I,0)
(I have,0)
(have,1)
(have the,1)
(the,2)
(the best,2) etc etc
基于我传递的字符串。
非常感谢任何帮助。
谢谢
我在实用程序中没有看到任何内容。这里有一些示例代码可以提供帮助:
import java.io.*;
import java.util.*;
import edu.stanford.nlp.io.*;
import edu.stanford.nlp.ling.*;
import edu.stanford.nlp.pipeline.*;
import edu.stanford.nlp.trees.*;
import edu.stanford.nlp.semgraph.*;
import edu.stanford.nlp.trees.TreeCoreAnnotations.*;
import edu.stanford.nlp.util.*;
public class NGramPositionExample {
public static List<List<String>> getNGramsPositions(List<String> items, int minSize, int maxSize) {
List<List<String>> ngrams = new ArrayList<List<String>>();
int listSize = items.size();
for (int i = 0; i < listSize; ++i) {
for (int ngramSize = minSize; ngramSize <= maxSize; ++ngramSize) {
if (i + ngramSize <= listSize) {
List<String> ngram = new ArrayList<String>();
for (int j = i; j < i + ngramSize; ++j) {
ngram.add(items.get(j));
}
ngram.add(Integer.toString(i));
ngrams.add(ngram);
}
}
}
return ngrams;
}
public static void main (String[] args) throws IOException {
String testString = "I have the best car";
List<String> tokens = Arrays.asList(testString.split(" "));
List<List<String>> ngramsAndPositions = getNGramsPositions(tokens,1,2);
for (List<String> np : ngramsAndPositions) {
System.out.println(Arrays.toString(np.toArray()));
}
}
}
您只需剪切并粘贴该实用方法即可。
这可能是一个有用的功能,所以我会把它放在我们的工作清单上。
只需花一些代码在scala中重写即可。它只是上面的代码将它更改为 scala。输出会像
NgramInfo(I,0)NgramInfo(I have,0)NgramInfo(have,1)NgramInfo(have the,1)NgramInfo(the,2)NgramInfo(the best,2)NgramInfo(best,3)NgramInfo(best car,3)NgramInfo(car,4)
下面是案例class
的方法 def getNgramPositions(items: List[String], minSize: Int, maxSize: Int): List[NgramInfo] = {
var ngramList = new ListBuffer[NgramInfo]
for (i <- 0 to items.size by 1) {
for (ngramSize <- minSize until maxSize by 1) {
if (i + ngramSize <= items.size) {
var stringList = new ListBuffer[String]
for (j <- i to i + ngramSize by 1) {
if (j < items.size) {
stringList += items(j)
ngramList += new NgramInfo(stringList.mkString(" "), i)
}
}
}
}
}
ngramList.toList
}
case class NgramInfo(term: String, termPosition: Int) extends Serializable
谢谢