コード例 #1
0
static void step1ab(struct stemmer * z) {
	char * b = z->b;
	if (b[z->k] == 's') {
		if (ends(z, "\04" "sses"))
			z->k -= 2;
		else if (ends(z, "\03" "ies"))
			setto(z, "\01" "i");
		else if (b[z->k - 1] != 's')
			z->k--;
	}
	if (ends(z, "\03" "eed")) {
		if (m(z) > 0)
			z->k--;
	} else if ((ends(z, "\02" "ed") || ends(z, "\03" "ing"))
			&& vowelinstem(z)) {
		z->k = z->j;
		if (ends(z, "\02" "at"))
			setto(z, "\03" "ate");
		else if (ends(z, "\02" "bl"))
			setto(z, "\03" "ble");
		else if (ends(z, "\02" "iz"))
			setto(z, "\03" "ize");
		else if (doublec(z, z->k)) {
			z->k--;
			{
				int ch = b[z->k];
				if (ch == 'l' || ch == 's' || ch == 'z')
					z->k++;
			}
		} else if (m(z) == 1 && cvc(z, z->k))
			setto(z, "\01" "e");
	}
}
コード例 #2
0
ファイル: wordxrefstem.c プロジェクト: ptdecker/cbasics
static void step1c() {

//    fprintf(stderr, "1c");

    if (ends("\01" "y") && vowelinstem())
        b[k] = 'i';
}
コード例 #3
0
ファイル: wordxrefstem.c プロジェクト: ptdecker/cbasics
static void step1ab() {

    char ch;

    if (b[k] == 's') {
        if (ends("\04" "sses"))
            k -= 2;
        else if (ends("\03" "ies"))
            setto("\01" "i");
        else if (b[k-1] != 's')
            k--;
    }

    if (ends("\03" "eed")) {
        if (m() > 0)
            k--;
    } else if ((ends("\02" "ed") || ends("\03" "ing") || ends("\02" "in")) && vowelinstem()) {
        k = j;
        if (ends("\02" "at"))
            setto("\03" "ate");
        else if (ends("\02" "bl"))
            setto("\03" "ble");
        else if (ends("\02" "iz"))
            setto("\03" "ize");
        else if (doublec(k)) {
            k--;
            ch = b[k];
            if (ch == 'l' || ch == 's' || ch == 'z')
                k++;
        } else if (m() == 1 && cvc(k))
            setto("\01" "e");
    }
}
コード例 #4
0
ファイル: porter-stemmer.c プロジェクト: hroptatyr/glod
/* step1c() turns terminal y to i when there is another vowel in the stem. */
static void
step1c(void)
{
	if (ends("\01" "y") && vowelinstem()) {
		b[k] = 'i';
	}
	return;
}
コード例 #5
0
ファイル: porter-stemmer.c プロジェクト: hroptatyr/glod
/* step1ab() gets rid of plurals and -ed or -ing. e.g.

       caresses  ->  caress
       ponies    ->  poni
       ties      ->  ti
       caress    ->  caress
       cats      ->  cat

       feed      ->  feed
       agreed    ->  agree
       disabled  ->  disable

       matting   ->  mat
       mating    ->  mate
       meeting   ->  meet
       milling   ->  mill
       messing   ->  mess

       meetings  ->  meet

*/
static void
step1ab(void)
{
	if (b[k] == 's') {
		if (ends("\04" "sses")) {
			k -= 2;
		} else if (ends("\03" "ies")) {
			setto("\01" "i"); 
		} else if (b[k-1] != 's') {
			k--;
		}
	}
	if (ends("\03" "eed")) {
		if (m() > 0U) {
			k--;
		}
	} else if ((ends("\02" "ed") || ends("\03" "ing")) && vowelinstem()) {
		k = j;
		if (ends("\02" "at")) {
			setto("\03" "ate");
		} else if (ends("\02" "bl")) {
			setto("\03" "ble");
		} else if (ends("\02" "iz")) {
			setto("\03" "ize");
		} else if (doublec(k)) {
			k--;
			{
				int ch = b[k];
				if (ch == 'l' || ch == 's' || ch == 'z') {
					k++;
				}
			}
		} else if (m() == 1U && cvc(k)) {
			setto("\01" "e");
		}
	}
	return;
}
コード例 #6
0
 void PorterStemmer::step1() {
   if (b[k] == _T('s')) {
     if (ends(_T("sses"))) k -= 2;
     else if (ends(_T("ies"))) setto(_T("i"));
     else if (b[k-1] != _T('s')) k--;
   }
   if (ends(_T("eed"))) {
     if (m() > 0)
       k--;
   }
   else if ((ends(_T("ed")) || ends(_T("ing"))) && vowelinstem()) {
     k = j;
     if (ends(_T("at"))) setto(_T("ate"));
     else if (ends(_T("bl"))) setto(_T("ble"));
     else if (ends(_T("iz"))) setto(_T("ize"));
     else if (doublec(k)) {
       int32_t ch = b[k--];
       if (ch == _T('l') || ch == _T('s') || ch == _T('z'))
         k++;
     }
     else if (m() == 1 && cvc(k))
       setto(_T("e"));
   }
 }
コード例 #7
0
static void step1c(struct stemmer * z)
{
   if (ends(z, "\01" "y") && vowelinstem(z)) z->b[z->k] = 'i';
}
コード例 #8
0
void step1c() { if (ends("\01" "y") && vowelinstem()) b[k] = 'i'; }
コード例 #9
0
 void Porter_Stemmer::step1c() { 
   if (ends("\01" "y") && vowelinstem()) b[k] = 'i'; 
 }
コード例 #10
0
 void PorterStemmer::step2() {
   if (ends(_T("y")) && vowelinstem()) {
     b[k] = 'i';
     dirty = true;
   }
 }