Получить первый символ каждого слова и его положение в предложении / абзаце - PullRequest
2 голосов
/ 11 мая 2010

Я пытаюсь создать карту, беря первый символ каждого слова и его положение в предложении / абзаце. Я использую шаблон регулярных выражений для достижения этой цели. Regex является дорогостоящей операцией. Есть ли способы добиться этого?

Regex way:

public static void getFirstChar(String paragraph) {
    Pattern pattern = Pattern.compile("(?<=\\b)[a-zA-Z]");
    Map newMap = new HashMap();

    Matcher fit = pattern.matcher(paragraph);
    while (fit.find()) {
        newMap.put((fit.group().toString().charAt(0)), fit.start());
    }
}

Ответы [ 2 ]

0 голосов
/ 11 мая 2010

Вы можете сделать свое собственное линейное сканирование, если вам действительно нужно сжать каждый бит производительности:

                 //0123456789012345678901
    String text = "Hello,my name is=Helen";
    Map<Character,Integer> map = new HashMap<Character,Integer>();

    boolean lastIsLetter = false;
    for (int i = 0; i < text.length(); i++) {
        char ch = text.charAt(i);
        boolean currIsLetter = Character.isLetter(ch);
        if (!lastIsLetter && currIsLetter) {
            map.put(ch, i);
        }
        lastIsLetter = currIsLetter;
    }

    System.out.println(map);
    // prints "{n=9, m=6, H=17, i=14}"

API ссылки

0 голосов
/ 11 мая 2010

Python:

wmap = {}
prev = 0
for word in "the quick brown fox jumps over the lazy dog".split():
    wmap[word[0]] = prev
    prev += len(word) + 1

print wmap

Если буква появляется более одного раза в качестве первой буквы слова, она отображается на последнюю позицию. Для получения списка всех позиций измените wmap [word [0]] = prev на:

if word[0] in wmap:
    wmap[word[0]].append(prev)
else:
    wmap[word[0]] = [prev]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...