2013-03-28 1 views
2

kStringFileTokenizerUnitSentence와 함께 CFStringTokenizer를 사용하여 문자열을 문장으로 분할하려고합니다. 내가 가지고있는 첫 번째 문제는 문장을 문장으로 인식 할 수 있도록 대문자로 표기해야한다는 것입니다. 그렇지 않다면, 그것은 단지 이전 문장의 일부라고 생각합니다.CFStringTokenizer가 소문자로 된 문장을 토큰으로 사용하지 않습니다.

사용자가 입력 한 텍스트가 나뉘어서 텍스트가 매우 부정확 할 것으로 예상됩니다.

CFStringTokenizer를 사용하여 캡슐화되지 않은 문장을 감지 할 수있는 다른 방법이 있습니까? 아니면 다른 방법으로 분할해야합니까? How to get an array of sentences using CFStringTokenizer?


참고 :

나는 내 구현이 SO 질문에 대답 다음에 '!'비트를 테스트 한 후에 더는 그 kCFStringTokenizerUnitSentence으로, 만약 것을 또는 '?' 비 대문자가 뒤 따르면 그 문장을 인식합니다. 또한 구두점 중 하나에 '!'기호 사이에 공백이없는 문장이 오는 경우 첫 번째 단어는 여전히 분리됩니다.

그래서 제가 해결해야 할 한 가지 경우는 '.'입니다. 그 다음에 대문자없는 문장이 뒤 따른다.


당신이 텍스트 필드로부터 텍스트를 얻는다면 내가 찾은 또 다른 옵션은이를 사용하는 것입니다 : 당신이 변환에 대해 걱정할 필요가 없습니다 있도록 자동으로 문장을 활용합니다

textField.autocapitalizationType = UITextAutocapitalizationTypeSentences; 

CFStringTokenizer의 경우. 그것은 여전히 ​​약어와 같은 엣지 경우를 설명하지 않지만, 적어도 나의 경우에는 사용자가 자동 ​​대문자를 삭제할 수있는 옵션을 가지고있을 것입니다.

+0

언어 독립적 구문 분석이 필요합니까? 그렇지 않다면 [문장 구성 요소 SeagatedByString : @ ""];로 근사값을 낼 수 있습니다. – danh

+0

@danh 언어 독립적 인 구문 분석이 필요합니다. 또한 문자열이 모든 곳에서 사용되기 때문에 상당히 견고한 무언가가 필요합니다. 모든 케이스 (존재하는 경우)를 다루는 out-of-the-box 문장 토크 나이저를 정말 좋아할 것입니다. – Ramsel

답변

0

먼저 입력 문자열을 모두 대문자로 변환 한 다음 CFStringTokenizer을 통해 실행하고 범위를 사용하여 원래 입력 문자열의 하위 문자열을 가져올 수 있습니다. 그러나 대문자로 변환 한 후 일부 문자가 1 자 이상이 될 수 있으므로 여기에서주의해야합니다.

+0

나는 유니 코드에 대해 정말로 배우는 것을 지연하고있다. - 영어 이외의 문자에주의해야 하는가? 악센트 부호가있는 문자와 같은? 나는 그들 중 이미 컴파일 된 문자셋을 온라인 어딘가에서 찾을 수있을 것이라고 확신한다 ... – Ramsel

+0

발견 : http://www.unicode.org/Public/UNIDATA/SpecialCasing.txt. 그들은 모두 그리스어, 라틴어, 리투아니아어 또는 터키인 것 같습니다. 독일어에는 'ß'라는 한 문자가 있습니다. 나는이 언어들 중 어느 것도 구현하지 않을 것이므로이 프로젝트에 대해서는 문제가 아닌 것처럼 보인다. – Ramsel

+0

그래서 이것을 구현했지만 당연히 "박사. Jum이라는 m.d라는 문장을 실현하고 있습니다." 나는 단어를 대문자로 쓰고 토큰 화하는지 여부에 따라 잘못 나뉘어 질 것입니다. 나는 내 질문에 대답했기 때문에 대답을 받아 들일 것입니다.하지만 저는 여전히 이와 같은 핵심 사례를 설명하는 좋은 토크 나이저를 찾아야합니다. 꽤 강건한 다른 프로그래밍 언어에 대한 문장 토큰 화가를 본 것처럼 느껴집니다. – Ramsel

관련 문제