给定一段字符串,如 [0..2) 如何找到等效的字符串?

Given a span of string like [0..2) how to find string equivalent?

我在 java.I 中使用 apache open nlp 工具包希望在给定文本中仅显示名称实体,如地理图形、人物等。以下代码片段给出了字符串跨度

try {
        System.out.println("Input : Pierre Vinken is 61 years old");
        InputStream modelIn = new FileInputStream("en-ner-person.bin");
        TokenNameFinderModel model = new TokenNameFinderModel(modelIn);
        NameFinderME nameFinder = new NameFinderME(model);
        String[] sentence = new String[]{
                "Pierre",
                "Vinken",
                "is",
                "61",
                "years",
                "old",
                "."
                };

            Span nameSpans[] = nameFinder.find(sentence);
            for(Span s: nameSpans)
                System.out.println("Name Entity : "+s.toString());
    }
    catch (IOException e) {
      e.printStackTrace();
    }

输出:

输入:Pierre Vinken 61 岁 名称实体:[0..2) 人

我怎样才能得到等效的字符串而不是跨度,有没有 api 的?

Span has the method getCoveredText(CharSequence text) 将执行此操作。但是我不明白为什么你需要一个 API 方法来获取对应于跨度的文本。跨度明确提供开始(包括)和结束(不包括)整数偏移量。所以以下就足够了:

StringBuilder builder = new StringBuilder();
for (int i = s.getStart(); i < s.getEnd(); i++) {
    builder.append(sentences[i]).append(" ");
}
String name = builder.toString();

您可以使用 Span class 本身。

以下 class 方法 return 对应于来自另一个 CharSequence textSpan 实例的 CharSequence

/**
 * Retrieves the string covered by the current span of the specified text.
 *
 * @param text
 *
 * @return the substring covered by the current span
 */
public CharSequence getCoveredText(CharSequence text) { ... }

请注意,此 class 也有两个静态方法,它们分别接受 Span 数组和 CharSequence 或标记数组 (String[]) 到 return 等价于 String.

的数组
/**
 * Converts an array of {@link Span}s to an array of {@link String}s.
 *
 * @param spans
 * @param s
 * @return the strings
 */
public static String[] spansToStrings(Span[] spans, CharSequence s) {
    String[] tokens = new String[spans.length];

    for (int si = 0, sl = spans.length; si < sl; si++) {
        tokens[si] = spans[si].getCoveredText(s).toString();
    }

    return tokens;
}

public static String[] spansToStrings(Span[] spans, String[] tokens) { ... }

希望对您有所帮助...