Получить атрибуты из простого письменного текста - PullRequest
0 голосов
/ 14 марта 2012

Допустим, у нас есть этот текст

85-килограммовый парень набрасывается на 10 миль, и тогда мы можем видеть, что он просто глупый текст индустрии печати и набора текста, и все это за 2 часа

И мы хотим захватить:

  1. 85 кг

  2. 10 миль

  3. 2 часа

Я пытался придумать функцию, которая могла бы получить атрибуты сома (уже известные атрибуты, конечно)

Допустим, мы хотим обнаружить:

Атрибут: [количество] [mesure]

И наши mesures:

[miles, seconds, hours, minutes, times, kilos]

Так что я думал взорвать текст в пробелах, проверьте, если словов массиве (из сообщений), и если предыдущее слово является числом, то у меня есть атрибут: D

(это своего рода псевдо / JavaScript-код)

function get_mesure_attrs(txt){
     var text = txt.split(' ');
     for (i=1;i<=text.length;i++{    /*Note i begin with i=1 cause the first word would never be a mesure of a desired atribute */
         if(text[i] is in_array(mesures){
            if(is_number(text[i-1]){
                console.log('Atribute: '+text[i-1]+' '+text[i]);
            }
     }
}

У меня недостаточнознакомство со связанными асоциативными массивами, поэтому мне было интересно, может ли кто-нибудь дать мне подсказку,

спасибо большое

Ответы [ 2 ]

1 голос
/ 14 марта 2012
var str= "The 85 kilos guy rant 10 miles and then we can se he is simply dummy text of the printing and typesetting industry and all of this in 2 hours 1 kilo",
measures = "mile|second|hour|minute|time|kilo";
function getMeasureAttrs(txt) {
  var re = RegExp( "\\b(\\d+)\\s(("+ measures +")s?)","g" );
  var attrs = [];
  txt.replace( re, function  ( $, $1, $2 ) {
    attrs.push ([ $1, $2 ] );
  })
  return attrs;
}
console.log(  getMeasureAttrs( str ) ); // [["85", "kilos"], ["10", "miles"], ["2", "hours"],["1","kilo"]]

по предварительному запросу

1 голос
/ 14 марта 2012

Я бы предложил использовать регулярные выражения:

function getMeasureAttrs(txt) {
  var re = /(\d+)\s+(miles|seconds|hours|minutes|times|kilos)/g;
  var match;
  while (match = re.exec(txt)) {
    console.log('Attribute: ' + match[1] + ' ' + match[2]);
  }
}

Две части в скобках в регулярном выражении - это то, что совпадает.Первый (\d+) означает целое число, а второй - список единиц, которые вы указали.

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