2013-01-22 3 views
1

텍스트 파일의 문장에 태그를 붙이는 프로그램을 Java로 작성하려고합니다. 각 태그에는 연관된 키워드 배열이 있습니다. 문장이 태그의 배열에 속한 하나 이상의 키워드를 포함하는 경우에만 문장에 태그가 적용됩니다.자바에서 키워드를 사용하는 문장 출력

예 : 나는 두 개의 꼬리표를 가지고있다 : 잘못과 적응. 이러한 태그 배열에서 버그, 실패 등 오류, 폴란드어, 정리를위한 정리 등의 단어가 있습니다. 문장 중 하나는 '버그 발견 및 고정'이며, 이는 결함 범주로 들어가므로 'bug'라는 단어가 포함 된 제목 오류 다음에 문장을 입력합니다. 나는 그것을 어떻게하는지에 관해 온라인으로 조사했다. 그러나 무엇이라도 발견하는 것처럼 보이지 않는다.

String[] faults = { 
      "Misspelled", 
      "Error", 
      "Fixed", 
      "Change",}; 

그리고

String[] adaption = {"Fixed comments", 
     "Filters", "Polish","Adjust"}; 

어떤 도움에 감사드립니다 :

이것은 내가 만든 배열 목록입니다. 고맙습니다. :)

+0

String 클래스에는 'indexOf()'함수가 있습니다.이 함수는 -1이 없으면 -1을, 찾으면 0을 반환합니다. if (line.indexOf (fault [i])> = 0)와 같은 오류를 사용하여 줄을 찾으려면. 이것은 단어 경계를 사용하지 않으므로'line.indexOf ('change')'는 'change', 'changes'및 'unchanged'를 찾습니다. –

+0

텍스트 파일의 단어로이 작업을 할 수 있습니까? – JustMe

+0

텍스트 파일 (또는 하나의 주석/메시지)에서 한 행을 문자열로 읽은 다음 모든 키워드 ('indexOf'를 사용하여 하나)에 대해 테스트해야합니다. 위의 문자열을 '라인'이라고했습니다. –

답변

1

정말 간단하지 않습니다. adaptionfault

  1. 이 먼저 문자열로 입력에서 전체 텍스트를 읽어야 ... 두 그룹이 될 것입니다.
  2. 두 번째로 문장을 String[] sentences = split()으로 찾아야합니다. '.', ',', '!' 모든 문장을 닫는 표시. 이 경우 을 프로토 타입 용으로 사용할 수있는 정규식을 사용해야합니다. 모든 공백 (\t \r \n 등)
  3. 그리고 마지막으로 당신이 가진 단어 배열을 반복해야 당신을 대표 String[] words=split(\\s+) 그렇게 공백 \\s+ 위해 찾는) -
  4. 그런 다음 당신은 당신이 지금 분할한다, 말을이 문장을 분할한다 for 루프를 사용하고 두 개 이상의 그룹 (adaption, fault) (indexOf() 또는 equals() 문자열 메서드 사용)에서 멤버와 일치하는 항목을 찾으십시오 ... 단어에 정확히 일치하는 항목이 있으면 HashMap 및 이 Group1.get("the word you present itareted")과 같이이 앱을 너무 빨리 실행할 수 있습니다.)

나는 소스도 작성할 수 있지만, 어떤 힌트, 어떻게하는지. 도움이 필요하면 GL을 작성하십시오!

+0

설명하기가 어렵습니다. 죄송합니다. 힌트를 주셔서 감사합니다 :). 네가 한 말을 해보고 그 일들을 보게. – JustMe

+0

그래, 나도 알아 :) 당신은 천만에요. 나는 힌트를 업데이트 했으므로 생각보다 분명하다. 그리고 나에게 가져 가면 마지막 힌트가된다.) 좀 더 복잡한 문제가 있다면, 더 작은 문제와 단계로 분해하려고 시도해보십시오 ... 그리고 나서이 작은 문제들/문제들에 대한 해결책을 찾으십시오. . – czupe

+0

분명히 지금, 나는 이것을 할 때 무엇을 찾을 지 안다. – JustMe

1

나는 당신의 질문을 정확하게 이해할 수 있을지 모르지만, 그렇다면 해시 맵을 대신 사용해 볼 수도 있습니다. 쌍을 가져야하고 특정 .get() 메소드를 사용하면 값을 검색 할 수 있습니다.

+0

나는 그것을 편집했다, 그것은 내가 모호한 조금 애매했다. 해시 맵을 살펴 보겠습니다. – JustMe

+0

나는 hashmap과 string util이 당신에게 트릭을 줄 것이라고 믿는다. – psychok7

+0

그래, 내가 그것에 대해 읽고 그것을 사용할 필요가있을 것이다. 답변 해 주셔서 감사합니다. – JustMe

1

java.lang.String의 설명서를 참조하여 문자열에 특정 하위 문자열 (또는 단어로 분할하는 방법)이 있는지 확인하는 방법을 알아 보려면 java.lang.HashMap을 참조하십시오. 인해 두 그룹에

당신은 두 개의 ArrayList를이 ... 당신이 원하는 :)하지만 난 그것을 얻을 생각 얻을

+0

그 점을 살펴 보겠습니다. – JustMe

1

정규 표현식을 사용하면 더 잘할 수 있다고 생각합니다. 각 카테고리를 들어, 파일의 각 행에 대한 패턴과 일치하려고 다음 정규 표현식 패턴을 정의하고, (나는 당신의 문구 라인 씩 와서 가정) 다음 find() 방법은 반환

import java.util.regex.*; 
// ...  

Pattern faults = Pattern.compile("Misspelled|Error|Fixed|Change"); 
Pattern adaption = Pattern.compile("Fixed Comments|Filters|Polish|Adjust"); 

// I assume I can read from BufferedReader 'in'. 

for (String line = in.readLine() ; line != null ; line = in.readLine()) { 
    if (faults.matcher(line).find()) { 
     // Classify as fault 
    } 
    if (adaption.matcher(line).find()) { 
     // Classify as adaption 
    } 
} 

true 또는 false 매치가 있었는지 아닌지에 따라 java.util.regex 패키지의 경우 Java documentation을, 그리고/또는 Jeffrey Friedl의 책 "Mastering Regular Expressions"을 살펴 보시기 바랍니다. 어쩌면 Java Tutorial Regular Expressions Trail도 도움이 될 수 있습니다.

관련 문제