:)我理解这可能对你来说是一个很长的问题,但不要相信我。我无法确定处理后无法读取和编辑此文本的原因。我尝试在python中使用ord()函数检查文本是否包含除ascii之外的任何Unicode字符(非ascii字符)..我发现它们中有很多。 我有一种强烈的感觉,这可能是由于原始文本本身(INPUT)。
输入文件:只需将其粘贴到文件“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”是我无法用于进一步处理的无法修复的Aand UNEDITABLE文件。我需要这个用于NLP中的Word对齐。我尝试使用以下程序读取此输出
#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行,其中有大约300万个字符。
请记住编辑器可能/可能无法管理打开文件的文件中的字符数。我能够在我正在使用的Fedora 10的gedit中打开该文件。这是只是为了通知你,至少在我的情况下,使用特定编辑器打开并不是一个问题......
如果是,如何使用Python和Perl等脚本语言来处理这个问题?我可以在这方面具体,因为我是Perl和Python的新手。或者你能告诉我如何使用C ++本身解决这个问题..谢谢...... :)我真的很期待有关如何解决这个问题的一些帮助或指导....
答案 0 :(得分:2)
(现在我可以回复,花一些时间编辑帖子。发帖时,请使用预览并阅读帮助!)
没有问题Python无法解决......而且这个问题肯定可以用python来解决。
修改了一下你的python脚本(缩进搞砸了!),我能够处理我可以从你的链接复制的内容,输出很好(但仍然包含一些像':'和'()的标点符号“)。
你说在第一个处理步骤之后,输出是不可读的和不可编辑的,但处理后输出文件的内容是什么?您是否尝试在编辑器中打开它并查看文件中的内容?如果第一步不起作用,请在第一步更正您的代码,并将您的问题集中在第一步。尝试使用调试器来查看代码失败的位置。
就个人而言,我怀疑是编码问题:你的输入文件是纯粹的ascii文件吗?或者它是否以unicode编码?
请注意,3MB的文件并不多。如果这给您带来了一些问题,请更改您的编辑器! (试试jEdit,epsilon,emacs,vi ......)