本文整理汇总了C++中CSentence::AddClause方法的典型用法代码示例。如果您正苦于以下问题:C++ CSentence::AddClause方法的具体用法?C++ CSentence::AddClause怎么用?C++ CSentence::AddClause使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CSentence
的用法示例。
在下文中一共展示了CSentence::AddClause方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CanLinkSimpleSimilar
int CSentence::CanLinkSimpleSimilar(int CommaWordNo)
{
try
{
/*
if comma is at the very beginning of ath the end, then exit
*/
if ( (CommaWordNo == 0)
|| (CommaWordNo + 1 >= m_Words.size() )
)
return -1;
if (GetOpt()->m_Language == morphGerman)
{
// we can use CSentence::m_GroupsUnion if Tomita is enabled
for (size_t i=0; i< m_GroupsUnion.GetGroups().size(); i++)
{
const CGroup& group = m_GroupsUnion.GetGroups()[i];
// ignore groups which contain only three words and the second word is
// a comma (a clause delimiter)
if (group.size() == 3)
if (m_Words[group.m_iFirstWord+1].m_bComma)
continue;
if ( (group.m_iFirstWord < CommaWordNo)
&& (group.m_iLastWord > CommaWordNo)
)
return group.m_iLastWord;
};
return -1;
};
const int Radius = (GetOpt()->m_Language == morphGerman)? 10 : 6;
int StartClauseWordNo = max(0, CommaWordNo - Radius);
CSentence* pSent = GetOpt()->NewSentence();
if (!pSent)
throw CExpc ("Cannot create sentence");
for (int i = StartClauseWordNo; i < min((int)m_Words.size(), CommaWordNo + Radius); i++)
pSent->m_Words.push_back(m_Words[i]);
CClause C(pSent, 0, pSent->m_Words.size() - 1);
pSent->AddClause(C);
pSent->m_bShouldUseTwoPotentialRule = false;
pSent->RunSyntaxInClauses(SimpleSimilarRules);
int Result = -1;
const CClause& prClause = pSent->m_Clauses[0];
for (CSVI it = prClause.m_SynVariants.begin(); (Result == -1)&& (it!=prClause.m_SynVariants.end()); it++)
for (size_t i=0; i< it->m_vectorGroups.GetGroups().size(); i++)
{
const CGroup& group = it->m_vectorGroups.GetGroups()[i];
// ignore groups which contain only three words and the second word is
// a comma (a clause delimiter)
if (group.size() == 3)
{
const CSynUnit& U = it->m_SynUnits[group.m_iFirstWord+1];
if (pSent->m_Words[U.m_SentPeriod.m_iFirstWord].m_bComma)
continue;
};
if ( (group.m_iFirstWord+StartClauseWordNo < CommaWordNo)
&& (group.m_iLastWord+StartClauseWordNo > CommaWordNo)
)
{
Result = group.m_iLastWord + StartClauseWordNo;
break;
};
}
delete pSent;
return Result;
}
catch(...)
{
OutputErrorString("Failed RunSyntaxInClause(CanLinkSimpleSimilar)");
return -1;
}
}