2011-04-13 5 views
7

PHP에서 일반 텍스트 문서를 구문 분석하려고하지만 올바르게 수행하는 방법을 모릅니다. 각 단어를 구분하고 ID를 할당하고 JSON 형식으로 결과를 저장하려고합니다.텍스트 문서를 분석하는 가장 좋은 방법

샘플 텍스트 :

"Hello, how are you (today)" 

이 메신저 순간에 무엇을 :

$document_array = explode(' ', $document_text); 
json_encode($document_array); 

결과 JSON 나는 공간이 유지되도록하려면 어떻게

[["Hello,"],["how"],["are"],["you"],["(today)"]] 

입니다 - 그 기호는 단어와 함께 포함되지 않습니다 ...

[["Hello"],[", "],["how"],[" "],["are"],[" "],["you"],[" ("],["today"],[")"]] 

확실한 정규식이 필요합니다 ...하지만 모든 경우를 다루기 위해 어떤 패턴의 패턴을 적용해야할지 모르겠군요 ... 어떤 제안입니까?

답변

2

아마도이 :?

:

array_filter(preg_split('/\b/', $document_text)) 

'array_filter은'당신의 문자열이 시작하거나 단어 경계 (http://php.net/manual/en/regexp.reference.escape.php \ B 형 참조)로 끝나는 경우가 나타납니다 결과 배열의 첫번째 및/또는 마지막 인덱스에서 빈 값을 제거

4

이것은 실제로 실제로 복잡한 문제이며 상당한 양의 학술적 재교 취에 영향을받습니다. 너무 간단하게 들리지만 (공백 문자로 구분하고 구두점에 대한 몇 가지 규칙을 사용하면 ...) 문제가 발생하기 쉽습니다. 한 두 단어가 "한 마디"입니까? 하이픈이 된 단어는 어떨까요? 어떤 단어는 한 단어 일 수도 있고, 어떤 단어는 두 단어 일 수도 있습니다. 여러 연속 구두점 문자는 어떨까요? 소유권 대 견적? 문장의 끝을 결정하는 것조차도 중요하지 않습니다. (이것은 단지 완전한 중지입니다!)

이 문제는 검색 엔진이 매우 중요하게 여기는 tokenisation 및 주제 중 하나입니다. 솔직히 말하면, 당신이 선택한 언어로 토큰 화기를 찾는 것을 실제로보아야합니다.

+0

그렇습니다. 제 3 자 솔루션이 아마도 최선의 선택 일 것입니다 ... 나는이 문제를 다루기 위해 수년에 걸쳐 상당히 복잡한 규칙을 세웠을 것으로 확신합니다. 어떤 제안? –

+1

php no. Java에는 숫자가 있습니다 : Open NLP, Stanford NLP, Lucene 's tokeniser 및 NLTK in python. –

+0

파이썬은 또 다른 웹 기반 언어입니다 ... 전에 사용하지 않았지만 파이썬에서 파서를 구현 한 다음 JSON을 다시 PHP로 보낼 수 있다고 생각합니다 ... 어떻게 든 –

관련 문제