char NameManager::chooseNextLetter(const char lastLetter, const char letterBeforeLast) {

	if (letterBeforeLast == ' ' && lastLetter == ' ')
		return 97 + System::random(25);

	StringBuffer last;
	last << Character::toLowerCase(lastLetter);

	String inclusion = "abcdefghijklmnopqrstuvwxyz";

	if (letterBeforeLast != ' ' && (!isVowel(lastLetter) && !isVowel(letterBeforeLast))) {

		inclusion = letterMappings.get("doubleconsonent");

	} else if ((letterBeforeLast != ' ' && isVowel(lastLetter) && isVowel(letterBeforeLast))) {

		inclusion = letterMappings.get("doublevowel");

	} else if ((letterBeforeLast != ' ' && lastLetter == 'u' && letterBeforeLast == 'q')) {

		inclusion = letterMappings.get("qu");

	} else if(letterMappings.contains(last.toString())) {

		inclusion = letterMappings.get(last.toString());
	}

	return chooseLetterInclusive(inclusion);
}
Ejemplo n.º 2
0
 String FrenchStemmer::retrieveRV(const String& buffer)
 {
     int32_t len = (int32_t)buffer.length();
     if (buffer.length() > 3)
     {
         if (isVowel(buffer[0]) && isVowel(buffer[1]))
             return buffer.substr(3);
         else
         {
             int32_t pos = 0;
             for (int32_t c = 1; c < len; ++c)
             {
                 if (isVowel(buffer[c]))
                 {
                     pos = c;
                     break;
                 }
             }
             if (pos + 1 < len)
                 return buffer.substr(pos + 1);
             else
                 return L"";
         }
     }
     else
         return L"";
 }
Ejemplo n.º 3
0
    String BrazilianStemmer::getR1(const String& value)
    {
        if (value.empty())
            return L"";

        // find 1st vowel
        int32_t i = (int32_t)(value.length() - 1);
        int32_t j = 0;
        for (; j < i; ++j)
        {
            if (isVowel(value[j]))
                break;
        }

        if (j >= i)
            return L"";

        // find 1st non-vowel
        for (; j < i; ++j)
        {
            if (!isVowel(value[j]))
                break;
        }

        if (j >= i)
            return L"";

        return value.substr(j + 1);
    }
Ejemplo n.º 4
0
 String FrenchStemmer::retrieveR(const String& buffer)
 {
     int32_t len = (int32_t)buffer.length();
     int32_t pos = -1;
     for (int32_t c = 0; c < len; ++c)
     {
         if (isVowel(buffer[c]))
         {
             pos = c;
             break;
         }
     }
     if (pos > -1)
     {
         int32_t consonne = -1;
         for (int32_t c = pos; c < len; ++c)
         {
             if (!isVowel(buffer[c]))
             {
                 consonne = c;
                 break;
             }
         }
         if (consonne > -1 && (consonne + 1) < len)
             return buffer.substr(consonne + 1);
         else
             return L"";
     }
     else
         return L"";
 }
Ejemplo n.º 5
0
 void RussianStemmer::markPositions(const String& word)
 {
     RV = 0;
     R1 = 0;
     R2 = 0;
     int32_t i = 0;
     // find RV
     while ((int32_t)word.length() > i && !isVowel(word[i]))
         ++i;
     if ((int32_t)word.length() - 1 < ++i)
         return; // RV zone is empty
     RV = i;
     // find R1
     while ((int32_t)word.length() > i && isVowel(word[i]))
         ++i;
     if ((int32_t)word.length() - 1 < ++i)
         return; // R1 zone is empty
     R1 = i;
     // find R2
     while ((int32_t)word.length() > i && !isVowel(word[i]))
         ++i;
     if ((int32_t)word.length() - 1 < ++i)
         return; // R2 zone is empty
     while ((int32_t)word.length() > i && isVowel(word[i]))
         ++i;
     if ((int32_t)word.length() - 1 < ++i)
         return; // R2 zone is empty
     R2 = i;
 }
Ejemplo n.º 6
0
char* en_en::getVerbPreAdd(int v){
 FILE* rFile=fopen(DICTIONARY EN_EN_FOLDER "verb_present","r");
 gotoline(rFile,v);
 char* buffer=(char*)malloc(BUFFER_SIZE);
 fgets(buffer,BUFFER_SIZE-1,rFile);
 fclose(rFile);
 char t=buffer[0];
 if (t=='1'){
  //Look up second word form
  int u=0,i=0;
  while (u<2){
   if (buffer[i]=='_')
    u++;
   else if (buffer[i]==0)
    break;
   else if (buffer[i]=='\n')
    break;
   i++;
  }
  u=0;
  while (buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n')
   buffer[u++]=buffer[i++];
  buffer[u++]=0;
 }else if (t=='0'){
  char* b=getVerb(v,10,0,1,&blank);
  int i=0;
  while (b[i]!=0) i++;
  //[(space)] [\0]
  //We are removing the space here, because it is added in getVerb because the function thinks we will just add it straight to the sentence.
  b[i-1]=0;
  return b;
 }else{
  int i=0;
  while(buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') i++;
  i++;
  int u=0;
  while (buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n')
   buffer[u++]=buffer[i++];

  //Now follow all the english rules
  //http://www.oxforddictionaries.com/words/verb-tenses-adding-ed-and-ing
  //http://www.grammar.cl/Notes/Spelling_ING.htm
  if (buffer[u-1]=='e' && buffer[u-2]=='i'){
   u-=2;
   buffer[u++]='y';
  }
  else if (buffer[u-1]=='e' && (buffer[u-2]!='e' && buffer[u-2]!='y' && buffer[u-2]!='o'))
   u-=1;
  else if (buffer[u-1]=='c'){
   buffer[u++]='k';
  }
  else if (!isVowel(buffer[u-3])&&isVowel(buffer[u-2])&&!isVowel(buffer[u-1])&&buffer[u-1]!='x'&&buffer[u-1]!='y'&&buffer[u-1]!='z'&&buffer[u-1]!='w'){
   buffer[u]=buffer[u-1];
   u++;
  }
  buffer[u++]=0;
 }
 return buffer;
}
Ejemplo n.º 7
0
inline void syllabize(
    std::vector<std::string>& mTarget, const std::string& mWord)
{
    auto itr(std::begin(mWord));
    auto itrEnd(std::end(mWord));
    auto valid([&itr, &itrEnd]() -> bool
        {
            return itr != itrEnd;
        });

    while(valid())
    {
        std::string currentSyllable;

        // CASE: beginning VC
        if(valid() && itr == std::begin(mWord) && isVowel(*itr) &&
            isConsonant(*(itr + 1)))
        {
            currentSyllable += *itr++;
            mTarget.emplace_back(currentSyllable);
            continue;
        }

        // CASE: C...V
        if(valid() && isConsonant(*itr))
        {
            while(valid() && isConsonant(*itr))
            {
                currentSyllable += *itr++;

                if(valid() && isVowel(*itr))
                {
                    currentSyllable += *itr++;

                    if(valid() && isConsonant(*itr))
                    {
                        char lastConsonant(*itr);
                        if(itr + 1 < itrEnd && *itr == lastConsonant &&
                            *(itr + 1) == lastConsonant)
                        {
                            currentSyllable += *itr++;
                        }
                    }

                    break;
                }
            }
        }

        // CASE: V
        else if(valid() && isVowel(*itr))
        {
            currentSyllable += *itr++;
        }

        mTarget.emplace_back(currentSyllable);
    }
}
Ejemplo n.º 8
0
 string reverseVowels(string s) {
     int i = 0, j = s.size() - 1;
     while (i < j) {
         while (i < j && !isVowel(s[i])) ++i;
         while (i < j && !isVowel(s[j])) --j;
         if (i < j) swap(s[i++], s[j--]);
     }
     return s;
 }
int isIntervocalical(unsigned short string[], int size, int position)
{
	if (position - 1 > 0 && position + 1 < size
	    && ((isVowel(string[position - 1]) && isVowel(string[position + 1]))
		|| (string[position - 1] != 0x0BCD
		    && string[position + 1] != 0x0BCD))) {
		return 1;
	}
	return 0;
}
 string reverseVowels(string s) {
     int i = 0, j = s.length()-1;
     while (i < j) {
         while (!isVowel(s[i])) ++i;
         while (!isVowel(s[j])) --j;
         if (i >= j) break;
         swap(s[i++], s[j--]);
     }
     return s;
 }
Ejemplo n.º 11
0
/* Like mgt0 above except we are looking for a value of m>1 instead
** or m>0
*/
static int m_gt_1(const char *z){
  while( isVowel(z) ){ z++; }
  if( *z==0 ) return 0;
  while( isConsonant(z) ){ z++; }
  if( *z==0 ) return 0;
  while( isVowel(z) ){ z++; }
  if( *z==0 ) return 0;
  while( isConsonant(z) ){ z++; }
  return *z!=0;
}
 string reverseVowels(string s) {
     // a e i o u
 	int lo = 0, hi = s.size() - 1;
 	while (lo < hi){
 		while (lo < s.size() && !isVowel(s[lo])) lo++;
 		if (lo > hi) break;
 		while (hi >= lo && !isVowel(s[hi])) hi--;
 		swap(s[lo++], s[hi--]);
 	}
 	return s;
 }
 string reverseVowels(string s) {
     int left = 0, right = s.size() - 1;
     while(left < right){
         while(!isVowel(s[left])) ++left;
         while(!isVowel(s[right])) --right;
         if(left < right){
             swap(s[left], s[right]);
         }
         ++left;
         --right;
     }
     return s;
 }
Ejemplo n.º 14
0
 string reverseVowels (string s) {
     if (s.size() <= 1) return s;
     int i = 0, j = s.size() - 1;
     while (i < j) {
         if (isVowel(s[i]) && isVowel(s[j]))
             swap(s[i++], s[j--]);
         else {
             if (!isVowel(s[i])) ++i;
             if (!isVowel(s[j])) --j;
         }
     }
     return s;
 }
Ejemplo n.º 15
0
 int32_t DutchStemmer::getRIndex(int32_t start)
 {
     if (start == 0)
         start = 1;
     int32_t i = start;
     for (; i < (int32_t)buffer.length(); ++i)
     {
         // first non-vowel preceded by a vowel
         if (!isVowel(buffer[i]) && isVowel(buffer[i - 1]))
             return i + 1;
     }
     return i + 1;
 }
 string reverseVowels(string s) {
     
     int lo = -1,hi = s.length();
     while(lo<hi){
         if(isVowel(s[++lo])){
             while(lo<hi&&!isVowel(s[--hi]));
             s = swapChar(s,lo,hi);
             
         }
     }
     return s;
     
     
 }
Ejemplo n.º 17
0
 string reverseVowels(string s) {
     int l = 0, r = s.size() - 1;
     while (l < r) {
         while ((l < r) && !isVowel(s[l]))
             l++;
         while ((l < r) && !isVowel(s[r]))
             r--;
         if (l < r) {
             swap(s[l], s[r]);
             l++;
             r--;
         }
     }
     return s;
 }
Ejemplo n.º 18
0
char* reverseVowels(char* s) {
    int l = 0;
    int r = strlen(s) - 1;
    while (l < r) {
        if (isVowel(s[l]) && isVowel(s[r]) ) {
            swap(s + l, s + r);
            l++;
            r--;
        } else {
            if (!isVowel(s[l])) l++;
            if (!isVowel(s[r])) r--;
        }
    }
    return s;
}
Ejemplo n.º 19
0
/*
** Return TRUE if the word ends with three letters which
** are consonant-vowel-consonent and where the final consonant
** is not 'w', 'x', or 'y'.
**
** The word is reversed here.  So we are really checking the
** first three letters and the first one cannot be in [wxy].
*/
static int star_oh(const char *z){
  return
    z[0]!=0 && isConsonant(z) &&
    z[0]!='w' && z[0]!='x' && z[0]!='y' &&
    z[1]!=0 && isVowel(z+1) &&
    z[2]!=0 && isConsonant(z+2);
}
Ejemplo n.º 20
0
 bool DutchStemmer::isValidSEnding(int32_t index)
 {
     wchar_t c = buffer[index];
     if (isVowel(c) || c == L'j')
         return false;
     return true;
 }
Ejemplo n.º 21
0
 string toGoatLatin(string S) {
     string result;
     int n = S.size(), i = 0, count = 0;
     while (i < n) {
         ++count;
         string word;
         while (i < n && S[i] != ' ') {
             word += S[i++];
         }
         if (isVowel(word[0])) {
             result += word + "ma";                
         }
         else {
             result += word.substr(1) + word.substr(0, 1) + "ma";                
         }
         int j = count;
         while (j--) {
             result += 'a';
         }
         if (i < n) {
             result += ' ';
         }
         ++i;
     }
     return result;
 }
Ejemplo n.º 22
0
char* removeVowels(char *sen) {
	char *temp=sen, *returnVal;
	int count = 0;

	if (sen == NULL)
		return NULL;

	//find size of sen including \0
	while (temp[count++] != '\0');

	//alloc memory
	returnVal = (char*)malloc(count*sizeof(char));

	//again RESET TEMP, COUNT
	temp = sen;count =0;

	while (temp[0] != '\0') {
		if (!isVowel(temp[0]))
			returnVal[count++] = temp[0];
		temp++;
	}
	returnVal[count]='\0';

	return returnVal;
}
Ejemplo n.º 23
0
int nOfVowel(char * buffer, size_t stringLength)
{
    if(stringLength==0)
        return 0;
    else
        return isVowel(*buffer) + nOfVowel(buffer + 1, stringLength - 1);
}
main()
{
	//get user input string
	printf("Please enter a word to be turned to pig latin\n");
	char str[100];
	gets(str);
	char first = str[0];
	//perform the string manipulation to make pig latin
	if (isVowel(first)==0)
	{
		char tmp[4];
		tmp[0] = first; tmp[1] = 'a'; tmp[2] = 'y'; tmp[3] = '\0';
		strcat(str, tmp);
		memmove(str, str + 1, strlen(str));
		printf("%s\n", str);
	}
	else
	{
		strcat(str, "yay");
		printf("%s\n", str);
	}
	//stall indefinitely to show the result
	while (1 == 1)
	{

	}

}
Ejemplo n.º 25
0
 bool FrenchStemmer::deleteFromIfTestVowelBeforeIn(const String& source, Collection<String> search, bool vowel, const String& from)
 {
     bool found = false;
     if (!source.empty() && !from.empty())
     {
         for (int32_t i = 0; i < search.size(); ++i)
         {
             if (boost::ends_with(source, search[i]))
             {
                 if ((search[i].length() + 1) <= from.length())
                 {
                     bool test = isVowel(stringBuffer[stringBuffer.length() - (search[i].length() + 1)]);
                     if (test == vowel)
                     {
                         stringBuffer.resize(stringBuffer.length() - search[i].length());
                         modified = true;
                         found = true;
                         setStrings();
                         break;
                     }
                 }
             }
         }
     }
     return found;
 }
Ejemplo n.º 26
0
 void FrenchStemmer::step6()
 {
     if (!R0.empty())
     {
         bool seenVowel = false;
         bool seenConson = false;
         int32_t pos = -1;
         for (int32_t i = (int32_t)(R0.length() - 1); i > -1; --i)
         {
             wchar_t ch = R0[i];
             if (isVowel(ch))
             {
                 if (!seenVowel)
                 {
                     if (ch == L'\x00e9' || ch == L'\x00e8')
                     {
                         pos = i;
                         break;
                     }
                 }
                 seenVowel = true;
             }
             else
             {
                 if (seenVowel)
                     break;
                 else
                     seenConson = true;
             }
         }
         if (pos > -1 && seenConson && !seenVowel)
             stringBuffer[pos] = L'e';
     }
 }
 string reverseVowels(string s) {
     if(s.size() < 2)
         return s;
     std::deque<char> stack;
     for(int i = 0; i < s.size(); i++){
         if(isVowel(s[i]))
             stack.push_back(s[i]);
     }
     for(int i = 0; i < s.size(); i++){
         if(isVowel(s[i])){
             s[i] = stack.back();
             stack.pop_back();
         }
     }
     return s;
 }
const String NameManager::makeResourceName(bool isOrganic) {
	int nameLength = 4 + System::random(6);
	String name;

	do {
		name = "";

		if (nameLength > 5 && System::random(2) == 1) {
			addPrefix(name, isOrganic);
		}

		if(name.length() < 2) {
			name += chooseNextLetter(' ', ' ');
			name += chooseNextLetter(name[0], ' ');
		}

		assert(name.length() != 0);

		while (name.length() < nameLength)
				name += chooseNextLetter(name[name.length() - 1], name[name.length() - 2]);

		if (!isVowel(name[name.length() - 1]) && name[name.length() - 1] != 'q' && System::random(1) == 1 )
			addSuffix(name, isOrganic);

		name[0] = Character::toUpperCase(name[0]);

	} while (validateName(name, -1) != NameManagerResult::ACCEPTED);

	return name;
}
Ejemplo n.º 29
0
 void DutchStemmer::step4()
 {
     if (buffer.length() < 4)
         return;
     String end(buffer.substr(buffer.length() - 4));
     if (end[1] == end[2] && end[3] != L'I' && end[1] != L'i' && isVowel(end[1]) && !isVowel(end[3]) && !isVowel(end[0]))
         buffer.erase(buffer.length() - 2, 1);
 }
Ejemplo n.º 30
0
static int isConsonant(const char *z){
  int j;
  char x = *z;
  if( x==0 ) return 0;
  assert( x>='a' && x<='z' );
  j = cType[x-'a'];
  if( j<2 ) return j;
  return z[1]==0 || isVowel(z + 1);
}