Не редактируемый файл и нечитаемый (для дальнейшей обработки) файл (ПОЧЕМУ?) После обработки через программу C ++ - PullRequest
0 голосов
/ 11 марта 2010

:) Это может показаться вам очень длинным вопросом, я понимаю, но поверьте мне, это не долго. Я не могу определить, почему после обработки этот текст не может быть прочитан и отредактирован. Я попытался использовать функцию ord () в python, чтобы проверить, содержит ли текст какие-либо символы Unicode (не символы ascii), кроме ascii .. Я нашел их довольно много. У меня сильное чувство, что это может быть связано с самим исходным текстом (ВХОД).

Входной файл: просто скопируйте и вставьте его в файл " acle5v1.txt "

Целью этого кода ниже является проверка символов верхнего регистра и преобразование его в символы нижнего регистра, а также удаление всех знаков препинания, чтобы эти слова были взяты для дальнейшей обработки для выравнивания слов

#include<iostrea>
#include<fstream>
#include<ctype.h>
#include<cstring>

using namespace std;

ifstream fin2("acle5v1.txt");
ofstream fin3("acle5v1_op.txt");
ofstream fin4("chkcharadded.txt");
ofstream fin5("chkcharntadded.txt");
ofstream fin6("chkprintchar.txt");
ofstream fin7("chknonasci.txt");
ofstream fin8("nonprinchar.txt");

int main()
{
char ch,ch1;
fin2.seekg(0);
fin3.seekp(0);
int flag = 0;

            while(!fin2.eof())
    {
        ch1=ch;
        fin2.get(ch);

        if (isprint(ch))// if the character is printable
            flag = 1;

        if(flag)
        {
            fin6<<"Printable character:\t"<<ch<<"\t"<<(int)ch<<endl;
            flag = 0;
        }
        else
        {
            fin8<<"Non printable character caught:\t"<<ch<<"\t"<<int(ch)<<endl;
        }

        if( isalnum(ch) || ch == '@' || ch == ' ' )// checks for alpha numeric characters
        {
            fin4<<"char added: "<<ch<<"\tits ascii value: "<<int(ch)<<endl;
            if(isupper(ch))
            {
                //tolower(ch);
                fin3<<(char)tolower(ch);
            }
            else
            {
                fin3<<ch;
            }
        }
        else if( ( ch=='\t' || ch=='.' || ch==',' || ch=='#' || ch=='?' || ch=='!' || ch=='"' || ch != ';' || ch != ':') && ch1 != ' ' )
        {
            fin3<<' ';
        }
        else if( (ch=='\t' || ch=='.' || ch==',' || ch=='#' || ch=='?' || ch=='!' || ch=='"' || ch != ';' || ch != ':') && ch1 == ' ' )
        {
            //fin3<<" ';
        }
        else if( !(int(ch)>=0 && int(ch)<=127) )
        {
            fin5<<"Char of ascii within range not added: "<<ch<<"\tits ascii value: "<<int(ch)<<endl;
        }
        else
        {
            fin7<<"Non ascii character caught(could be a -ve value also)\t"<<ch<<int(ch)<<endl; 
        }   
    }
    return 0;
}

У меня есть код , аналогичный приведенному выше написанному на python, который дает мне результат, который снова не читается и не редактируется

Код на python выглядит так:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys

input_file=sys.argv[1]
output_file=sys.argv[2]

list1=[]

f=open(input_file)
for line in f:
    line=line.strip()   
    #line=line.rstrip('.')   
    line=line.replace('.','')
    line=line.replace(',','')
    line=line.replace('#','')
    line=line.replace('?','')
    line=line.replace('!','')
    line=line.replace('"','')
    line=line.replace('।','')
    line=line.replace('|','')       
    line = line.lower() 
    list1.append(line)
    f.close()

    f1=open(output_file,'w')

    f1.write(' '.join(list1))

    f1.close()

файл принимает ip и op во время выполнения .. as:

python punc_remover.py acle5v1.txt acle5v1_op.txt

Выходные данные этого файла находятся в "acle5v1_op.txt"

теперь после обработки этот конкретный выходной файл необходим для дальнейшей обработки. Этот конкретный файл "aclee5v1_op.txt" является НЕЗАКАЗАННЫМ И НЕОБХОДИМЫМ файлом, который я не могу использовать для дальнейшей обработки. Мне это нужно для выравнивания слов в НЛП. Я попытался прочитать этот вывод с помощью следующей программы

#include<iostream>
#include<fstream>

using namespace std;

ifstream fin1("acle5v1_op.txt");
ofstream fout1("chckread_acle5v1_op.txt");
ofstream fout2("chcknotread_acle5v1_op.txt");

int main()
{
    char ch;
    int flag = 0;
    long int r = 0; long int nr = 0;

    while(!(fin1))
    {
        fin1.get(ch);

        if(ch)
        {
            flag = 1;
        }

        if(flag)
        {
            fout1<<ch;
            flag = 0;
            r++;
        }
        else
        {
            fout2<<"Char not been able to be read from source file\n";
            nr++;
        }
    }

    cout<<"Number of characters able to be read: "<<r;
    cout<<endl<<"Number of characters not been able to be read: "<<nr;

    return 0;
}

, который печатает символ, если он читается, а если нет, то не печатает их, но я заметил, что вывод обоих файлов пуст, поэтому я могу сделать вывод, что этот файл "acle5v1_op.txt" НЕРАЗРЕШЕН И НЕ УДАЛЕН. Не могли бы вы помочь мне, как справиться с этой проблемой ..

Чтобы рассказать вам немного о статистике по сравнению с исходным входным файлом "acle5v1.txt", он содержит около 3441 строки и около 3 миллионов символов.

Имея в виду, что количество символов в файле, который вы редактируете, может / может не быть в состоянии открыть файл .. Мне удалось открыть файл в gedit Fedora 10, который я сейчас использую .. Это просто чтобы предупредить вас, что открытие с определенным редактором не было проблемой, по крайней мере, в моем случае ...

Могу ли я использовать языки сценариев, такие как Python и Perl, для решения этой проблемы, если да, то как? могли бы быть конкретны в этом отношении, так как я новичок в Perl и Python. Или не могли бы вы сказать мне, как я могу решить эту проблему с помощью самого C ++ ... Спасибо ... :) Я действительно с нетерпением жду некоторой помощи или руководства о том, как решить эту проблему ....

1 Ответ

2 голосов
/ 11 марта 2010

(теперь я могу ответить, потратив некоторое время на редактирование сообщения. При публикации, пожалуйста, используйте предварительный просмотр и прочитайте справку!)

Нет проблем, с которыми Python не может справиться ... и эта проблема определенно может быть решена с помощью python.

После небольшого изменения вашего скрипта на python (отступы!) Я смог обработать контент, который мог скопировать по вашей ссылке, вывод был в порядке (но все еще содержал пунктуацию вроде ':' and '() «).

Вы говорите, что после первого шага обработки выходные данные не читаются и не редактируются, но каково содержимое выходного файла после обработки? Вы пытались открыть его в редакторе и посмотреть, что было в файле? Если этот первый шаг не работает, исправьте свой код на первом шаге и сфокусируйте свой вопрос на этом первом шаге. попробуйте использовать отладчик, чтобы увидеть, где ваш код не работает.

лично, я подозреваю, что проблема с кодировкой: ваш входной файл - чистый файл ascii? или может быть так, что он закодирован в юникоде?

обратите внимание, что файл размером 3 МБ - это немного. если это создает какие-то проблемы для вас, измените ваш редактор! (попробуйте jEdit, epsilon, emacs, vi ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...