Расширенный поиск текста в ActionScript-вернуть все существительные, прилагательные и глаголы - PullRequest
2 голосов
/ 13 марта 2010

Я знаю, что у as3 есть несколько новых мощных возможностей поиска текста, особенно в сочетании с регулярным выражением.

Я даже не знаю, возможно ли это, но я бы хотел как-то найти любой фрагмент текста и вернуть все существительные, прилагательные и глаголы.

Каков наилучший (самый эффективный) способ сделать это? Это регулярное выражение вариант? или я должен был бы загрузить в какой-нибудь словарь с открытым исходным кодом 9, используемый в средствах проверки орфографии), чтобы сравнить с или ??

После того как я вытащил все существительные, прилагательные и глаголы, мне нужно посчитать и расставить приоритеты по их частоте.

Любые предложения приветствуются ...

Ответы [ 4 ]

0 голосов
/ 13 марта 2010

Спасибо за предложение!

Другой подход, который я рассматривал, состоял в том, чтобы сначала удалить все местоимения, предлоги из исходной коллекции, а затем проиндексировать ВСЕ оставшиеся слова.

То, что нужно оставить, это индексный список всех существительных, глаголов, наречий.

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

0 голосов
/ 13 марта 2010

Я наткнулся на эту полную поисковую систему с открытым исходным кодом

http://www.servebox.org/actionscript-foundry/actionscript-foundry-documentation/full-text-search-tree/

Последовательность шагов такая, какой я ее вижу

1) создайте или получите список всех английских существительных, глаголов, прилагательных (любые советы по получению или созданию этого списка приветствуются!)

2) Поиск источника данных, чтобы увидеть, существует ли совпадение с первым словарным словом

3) если совпадение существует, создайте индекс, который будет содержать количество вхождений.

4) Перейдите ко второму слову в словаре и повторите шаги 2 и 3.

5) повторять, пока каждое слово в словаре не будет использовано для поиска.

0 голосов
/ 13 марта 2010

Так что @Robusto - это правильно, вам понадобятся какие-то словарные данные, которые содержат слова и ассоциируют их как существительные, глаголы или прилагательные.Однако, если вы можете найти это или собрать его самостоятельно (это может занять некоторое время), вы можете использовать объект Dictionary в AS3 для построения ваших массивов результатов:

//dummy data
var testString:String = "Mary had a little lamb her fleece was white as snow";
var testString2:String = "The blue zebra had a rad jacket";

var nouns:Array = ['cup', 'Mary', 'phone', 'lamb', 'jacket', 'fleece', 'snow', 'zebra'];
var verbs:Array = ['had', 'was', 'ran', 'jumped', 'read'];
var adj:Array =   ['awesome', 'rad', 'little', 'tall', 'white', 'blue', 'red'];

//SETUP
//Create the dictionaries, in a more complex setting you might load data in from an XML file
//here I'm just pulling the data from the arrays created above
var nounDict:Dictionary = createDictionary( nouns );
var verbDict:Dictionary = createDictionary( verbs );
var adjDict:Dictionary =  createDictionary( adj );

//Creates a dictionary based on an Array of words
function createDictionary( wordData:Array ):Dictionary {
    var dict:Dictionary = new Dictionary( true );

    for(var i:uint = 0; i < wordData.length; i++) {

        //add the word as a key to the dictionary
        dict[ wordData[i] ] = wordData[i];

    }

    return dict;
}


//SEARCHING
//str is the string you want to search through
//dict is the dictionary you want to use to search against the string
function searchDictionary( str:String, dict:Dictionary ):Array {

    //break up the words by the spaces (you can figure out how to deal with punctuation)
    var words:Array = str.split(' ');
    //store the matching words in the matches array
    var matches:Array = [];

    for( var i:uint = 0; i < words.length; i++) {


        //check the dictionary for the word
        if(dict[ words[i] ]) {
            matches.push(words[i]);
        }

    }
    return matches;

}


//TEST IT OUT
trace( searchDictionary( testString, nounDict ) );
trace( searchDictionary( testString, verbDict ) );
trace( searchDictionary( testString, adjDict )  );

trace( searchDictionary( testString2, nounDict ) );
trace( searchDictionary( testString2, verbDict ) );
trace( searchDictionary( testString2, adjDict ) );

Вы можете вставить этот код в новый FLAфайл и посмотреть, как это работает.

0 голосов
/ 13 марта 2010

Не существует выражения регулярного выражения, которое имеет какое-либо понятие грамматического синтаксиса или частей речи. Регулярные выражения - это просто способ поиска шаблонов в строках.

Чтобы сделать то, что вы хотите, вам нужно подключить, как вы говорите, «своего рода словарь с открытым исходным кодом». Объем работы, вероятно, будет значительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...