Java의 텍스트 파일에서 총 단어 수를 찾는 가장 좋은 방법은 무엇입니까? 나는 Perl이 이것과 같은 것들을 찾는 데 최선이라고 생각하고 있습니다. 이것이 사실이라면 자바 내에서 Perl 함수를 호출하는 것이 가장 좋을까요? 이런 상황에서 당신은 무엇을했을까요? 더 좋은 아이디어?Java에서 파일의 총 단어 수를 확인하는 가장 좋은 방법은 무엇입니까?
답변
축하합니다 당신은 가장 큰 언어 적 문제 중 하나 우연히 발견했다! 단어가 무엇입니까? 단어가 실제로 그것이 무엇인지 의미하는 유일한 단어라고합니다. 단어/의미 단위 - 형태학에 전념하는 언어학 분야가 있습니다.
당신이 질문하는 단어는 영어로 계산하는 것으로 간주됩니다. 그러나 언어 중립적 인 단어 카운터/구문 분석기를 만드는 것은 언어 적 차이로 인해 불가능한 것입니다. 예를 들어, 공백으로 구분 된 문자 그룹을 처리하는 것만으로 충분하다고 생각할 수 있습니다. 일본어에서 다음의 예를 보면하지만, 그 접근 방식이 작동하지 않는 것을 볼 수 있습니다 :
こ れ は 日本語 の 例文 で す
이 예제는 3 개 별개의 단어를 포함하고 그들 중 누구도 분리되지 않습니다. 공백으로. 일반적으로 일본어 단어 경계는 사전 기반 접근 방식을 사용하여 구문 분석되며이를 위해 사용할 수있는 상용 라이브러리가 많이 있습니다. 영어로 된 공간이있어서 운이 좋은가요? 인도어, 중국어, 한국어도 비슷한 문제가 있다고 생각합니다.
이 솔루션을 실제로 여러 가지 언어로 입력 할 수있는 방법으로 배포하려는 경우 구문 분석 할 언어에 따라 다른 단어 계산 방법을 플러그인 할 수 있어야합니다.
첫 번째 대답은 유니 코드 공백 값에 대한 Java의 지식을 구분 기호로 사용하기 때문에 좋은 대답이라고 생각합니다. 다음 정규식을 사용하여 일치시켜 토큰 화합니다. \p{javaWhitespace}+
나는 파일의 각 문자를 1로 다음 루프를 word_count
INT를 초기화하고 이전 문자가 공백 문자이었다하지 않는 한 모든 공백 문자 에 대한 word_count
을 증가 것입니다. (공백, 탭 또는 줄 바꿈)
'단어'를 정의하는 것에 대해 몇 가지 가정을하는 한 가지 해결책은 텍스트 스트림 판독기를 사용하여 파일을 열고 스캔하여 연속되지 않는 공백 수를 계산하는 것입니다 문자, 끝 부분에 하나 추가
this is some sample text
this is some more sample text
위의 텍스트는 9 개 공간과 1 줄 바꿈과 펄이 작업을 수행 할 수 있지만
, 나는 과잉을 생각 하는데요 파일의 마지막에 1을 연결하는로 계산 거기에 11 개 단어를 것 in /이 종류의 작업을 위해 호출하십시오 (이미 테스트 해 보지 않은 경우).
- 내 제안은 웹에서 필요한 것을 수행하는 코드에서 &을 배우는 것입니다. 여기 : http://schmidt.devlib.org/java/word-count.html
int count = 0;
Scanner sc = new Scanner(new File("my-text-file.txt"));
while (sc.hasNext()) {
++count;
sc.next();
}
유닉스에있는 경우 wc -w filename
이 트릭을 수행합니다.
Perl에서 볼 수있는 유니 코드 \ p {Space} 속성과 일치하지 않으므로 Java에서 \ p {javaWhiteSpace}를주의하십시오. 둘 다 코드 포인트 0009, 000A, 000B, 000C, 000D, 00A0, 2007 및 202F를 포함합니다.Java 공백은 또한 유니 코드 공백이 아닌 001C, 001D, 001E를 포함합니다. Java 공백 문자는 여러 유니 코드 공백 코드 포인트를 무시합니다. 그 중 가장 심각한 것은 00A0, NO-BREAK SPACE입니다. 이것은 전에 문제가 생겨서 매우 조심해야합니다. – tchrist
멋진 코멘트. 나는 최근 C#에서도 마찬가지라는 사실을 발견했다. – Elijah