соглашениеp: возвращать только лучшие совпадения

Попробуйте этого от Codeproject (кредит к Нитрону):

я думаю, что это - то же диалоговое окно, о котором Вы говорите - возможно, помогло бы, добавляете ли Вы снимок экрана?

bool GetFolder(std::string& folderpath, const char* szCaption=NULL, HWND hOwner=NULL)
{
    bool retVal = false;

    // The BROWSEINFO struct tells the shell how it should display the dialog.
    BROWSEINFO bi;
    memset(&bi, 0, sizeof(bi));

    bi.ulFlags   = BIF_USENEWUI;
    bi.hwndOwner = hOwner;
    bi.lpszTitle = szCaption;

    // must call this if using BIF_USENEWUI
    ::OleInitialize(NULL);

    // Show the dialog and get the itemIDList for the selected folder.
    LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi);

    if(pIDL != NULL)
    {
        // Create a buffer to store the path, then get the path.
        char buffer[_MAX_PATH] = {'\0'};
        if(::SHGetPathFromIDList(pIDL, buffer) != 0)
        {
            // Set the string value.
            folderpath = buffer;
            retVal = true;
        }       

        // free the item id list
        CoTaskMemFree(pIDL);
    }

    ::OleUninitialize();

    return retVal;
}

23
задан Zach 19 April 2011 в 20:09
поделиться

1 ответ

Пакет agrep использует расстояния Левенштейна для сопоставления строк. Пакет RecordLinkage имеет функцию C для вычисления расстояния Левенштейна, которая может быть использована непосредственно для ускорения ваших вычислений. Вот переработанная функция ClosestMatch, которая примерно в 10 раз быстрее

library(RecordLinkage)

ClosestMatch2 = function(string, stringVector){

  distance = levenshteinSim(string, stringVector);
  stringVector[distance == max(distance)]

}
27
ответ дан 29 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: