Text_mining

Тема в разделе "MS Visual C++", создана пользователем Eleet31337, 26 мар 2013.

  1. Eleet31337

    Eleet31337 New Member

    Регистрация:
    26 мар 2013
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте... Ребята, пожалуйста помогите объяснить данный пример .... как он работает ...... Спасибо...

    #include <iostream>
    #include <fstream>
    #include <string> // getline()
    #include <sstream> // istringstream


    using namespace std;


    // Declaration of grobal variables //
    int nTotalLineIndex = 0;
    int nTheNumberofPMID = 0;

    // Lower case function //
    void toLowerCaseSTD(std::string&s)
    {
    for (std::string::iterator i = s.begin(); i != s.end(); ++i)
    *i = tolower(*i);
    }

    // Read file //
    ifstream readData(string strFileName)
    {
    ifstream f_data(strFileName);
    if (f_data.is_open()){ // f_filenaem.is_open() : check if a file stream was successful opening a file
    cout <<"Reading data success!!"<< endl;
    return f_data;
    }
    else{
    cout<<"Reading data is failed!!"<<endl;
    exit(0);
    }
    }
    string readLine(ifstream &DataName)
    {
    string strLine_local;
    getline(DataName,strLine_local); // getline(f_fileaname, stirng var) : extract characters from f_filename data by line
    toLowerCaseSTD(strLine_local);
    return strLine_local;
    }

    void chekingProcess(int nTheNumberofPMID)
    {
    if (nTheNumberofPMID % 1 == 0) cout << "The number of processed PMID : "<< nTheNumberofPMID<<endl;
    }


    string PMIDExtractor(string strLine, string strPreviousPMID)
    {
    int nPMIDChecker = strLine.find("pmid");
    string strLocalPMID;
    if (nPMIDChecker == 0){
    strLocalPMID = strLine;
    nTheNumberofPMID++;
    chekingProcess(nTheNumberofPMID);
    cout<<strLocalPMID<<endl;
    }
    else strLocalPMID = strPreviousPMID;
    return strLocalPMID;
    }
    string manipulateGeneName(string strGeneToken)
    {
    strGeneToken.insert(strGeneToken.begin(),1,' ');
    strGeneToken.insert(strGeneToken.end(),1,' ');
    return strGeneToken;
    }

    int geneToeknMatching(istringstream &issGeneName, string strGeneToken, int nStandardGeneCheker,string strPubMedLine,ofstream &f_Results,string strPMID)
    {
    string strStandardGeneID;
    while (getline(issGeneName,strGeneToken,'\t')){

    // Searching standard gene //
    nStandardGeneCheker++;
    if (nStandardGeneCheker == 1) strStandardGeneID = strGeneToken;

    strGeneToken = manipulateGeneName(strGeneToken); // manipulating gene name for exact matching. ex) 'pa010' ==> ' pa010 ' //

    // Matching genes in PubMed sentence //
    if (int(strPubMedLine.find(strGeneToken)) != -1 && (strGeneToken.length() > 5)){ // string.find("word") : return position of first matched word, if there exists matching event to word user definded in string, otherwise return -1

    int nCompareState = 0;
    string strSentenceToken;

    // Sentence tokenization //
    istringstream issPubMedLine(strPubMedLine);

    if (f_Results.is_open()){

    f_Results << strStandardGeneID<<'\t'<<strPMID<<'\n';

    }
    else cout<<"Unable to open result file!!"<<endl;
    }
    }
    return 0;
    }

    int geneMatching(ifstream &f_GeneDic,string strPubMedLine,ofstream &f_Results,string strPMID)
    {
    string strGeneDictionaryLine;

    while (f_GeneDic.good()){

    string strStandardGeneID;
    string strGeneToken;
    int nStandardGeneCheker = 0;

    // Reading gene dictionary by line //
    strGeneDictionaryLine = readLine(f_GeneDic);

    // Dictionary tokenization //
    istringstream issGeneName(strGeneDictionaryLine);
    geneToeknMatching(issGeneName,strGeneToken,nStandardGeneCheker,strPubMedLine,f_R
    esults,strPMID);

    if (f_GeneDic.eof() == 1){
    f_GeneDic.clear();
    f_GeneDic.seekg(0,ios::beg);
    break;
    }
    }
    return 0;
    }

    int readAbstract(string strLiteraturefile,string strGeneDicfile,string strOutputfile)
    {
    // Read dataset //
    string strFileName_PubMedData = strLiteraturefile;
    string strFileName_GeneDictionary = strGeneDicfile;

    ifstream f_PubMedData = readData(strFileName_PubMedData);
    ifstream f_GeneDic = readData(strFileName_GeneDictionary);

    // Open result data //
    ofstream f_Results (strOutputfile); // ofstream : stream class to write on files
    f_Results<<"GeneName\tPMID\n" ;

    string strPubMedLine;
    string strPMID;
    while (f_PubMedData.good()){ // f_filenaem.good() : check whether state of stream has error or not

    // Reading PubMed data by line //
    strPubMedLine = readLine(f_PubMedData);
    nTotalLineIndex++;

    // PMID Extraction //
    strPMID = PMIDExtractor(strPubMedLine,strPMID);
    geneMatching(f_GeneDic,strPubMedLine,f_Results,strPMID);

    }

    f_PubMedData.close();
    f_GeneDic.close();
    f_Results.close();
    return 0;
    }


    int main ()
    {
    // Read dataset //
    string strLiteraturefile = "Alzheimer_disease_Literature_test.txt";
    string strGeneDicfile = "gene_disease_dictionary_test.txt";
    string strOutputfile = "Alzheimer_table_test.txt";

    readAbstract(strLiteraturefile,strGeneDicfile,strOutputfile);
    }
     

    Вложения:

  2. opanaskovladimir

    opanaskovladimir New Member

    Регистрация:
    16 окт 2013
    Сообщения:
    4
    Симпатии:
    0
    Никто не будет делать работу за тебя. Ты его сам объясни, а тебе его помогут подредактировать.
     

Поделиться этой страницей