2014-06-12 4 views
1

1000 개 이상의 텍스트가 포함 된 파일이 있습니다. 파일의 일부 기능은 동일하지만, 다른 사용자는 예를 들어, 다른 방법으로 그것을 입력 :Matlab을 사용하여 텍스트 파일을 필터링하는 방법

사용자 1은 입력 : 구글
사용자 2가 입력 : 구글, (쉼표의 :
사용자 3가 입력 (모두 소문자)를 구글 끝)

위의 모든 항목이 동일한 기능을 가지고 있음은 분명합니다. 필자의 목표는 기능 파일을 필터링하여 출력물에 중복 기능이없는 고유 한 기능 만 제공하도록하는 것입니다.

Matlab을 사용하여이 작업을 수행해야합니다. 어떻게하면이 작업을 수행 할 수 있는지 알 수 있습니까?

정말 txt 파일과 비슷합니다. 세 개의 열, 행 번호, 기능 설명 및 기능 자체는
입니다.
.
.
JOB_TITLE 909 : 비 ascii_909
JOB_TITLE 910 : 비 ascii_910
JOB_TITLE 911 : 비 ascii_911
912 LAST_NAME 아론
913 LAST_NAME 아담
.
.

이미 matlab에서이 파일을 읽었습니다. 파일을 드래그했습니다. 그것을 행렬에로드하는 방법을 알고 있습니다.

두 특징의 문자 순서가 동일하고 차이가 대문자, 소문자, 공백 또는 다른 문자 인 경우 해당 사본을 말하게 할 수 있습니다.

많은 감사

+0

자세한 내용은 다음과 같습니다. 파일에 이러한 기능이 어떻게 포함되어 있습니까? Matlab에 이미이 파일을 읽었습니까? 중복으로 기능을 선언하는 기준은 무엇입니까? 스페이스? 대시? –

+0

수정 됨. 다른 것이 있습니까? –

+0

[FLX] (http://www.mathworks.com/matlabcentral/fileexchange/32449-edit-distances) 예제와 같이 편집 거리를 사용하는 것이 좋습니다. – Shai

답변

0

한 가지 방법은 이후에만 텍스트를 구문 분석, 각 라인에서 읽을 수있는 (나는 당신이 무엇을 쓸 이해, 그건 당신이에서 중복을 제거 할 부분이다). 관심있는 텍스트를 읽을 때 소문자로 변환 할 수 있습니다 (원하는 경우 대문자를 사용할 수도 있습니다). 그런 다음 끝에있는 중복 항목을 제거하십시오.

그런 일을 수행하는 방법에 대한 빠른 패스 : ':'애프터 텍스트 저장, 파일 라인별로 라인을 통해

entries = {}; 
full_lines = {}; 
idx = 1; 

fid=fopen('\PATH\TO\FILE.txt','r'); 
tline = fgets(fid); 
while ischar(tline) 
    full_lines(idx) = cellstr(tline); 
    [tkn rem] = strtok(tline,':'); 
    [tkn rem] = strtok(rem,':'); 
    lower_case = lower(tkn); 
    entries(idx) = cellstr(lower_case); 

    idx = idx + 1; 
    tline = fgets(fid);  
end 

fclose(fid); 

no_duplicates = unique(entries); 
full_lines_no_duplicates = full_lines(indices); 

이 간다를 배열의 모든 소문자 등을 한 후 제거 중복 된 값. 이로 인해 고유 한 값만 남게됩니다. 또한 필요한 경우 전체 줄을 저장하므로 full_lines_no_duplicates 변수에는 파일의 전체 줄이 중복없이 포함됩니다.

0

이미 데이터를 Matlab에 가져 왔으므로. 각 줄을 반복하면서 시작하여 각 기능을 귀하의 자격 요건에 맞게 수정하는 것입니다.

for i=1:length(feature_vector) 
    line=feature_vector(i); //extract line from vector 
    //clean 'line' data 
    feature_vector(i)=line; //re-insert cleaned line to vector 
end 

처음에는 기능을 고려할 때 대소 문자를 구분하지 않으려합니다.이렇게하려면, 단지 등의 모든 소문자 대응에 각 기능을 변환 :

line=lower(line); 

라인은 당신이 당신의 루프 내에서 얻을 문자열 기능 중 하나입니다.

다음, 당신은 기능에서 모든 특수 문자를 제거 할 것, 그리고으로 달성 될 수있다 : 알파벳의 편지 아닌 당신의 기능을 내부에 편지를 제거합니다

line(~ismember(line,['a':'z'])) = ''; 

이.

전체 데이터 집합에 대해이 작업을 수행 한 후에는 모두 소문자이며 알파벳 만 포함 된 셀 배열이 남아 있어야합니다.

당신은 matlab에의 '독특한()'기능을 사용하여 셀 어레이의 고유 기능의 목록을 중복을 제거하고 얻을 수 있습니다 :이 도움이

[U,IDX]=unique(feature_vector); 

희망을!

관련 문제