TIP게시판

제목 php용 형태소 분석기 설치 및 바인딩과 실사용
글쓴이 양승현 작성시각 2017/06/14 11:00:34
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 384   RSS

형태소분석 php용 입니다. 여러 블로그들에 잘 정리 되어있네요.

최신dic파일로 변경하셔서 사용하시면 될듯 합니다.

검색시에 유용하네요.

 

# 설치 참고 : http://gogoke1.blog.me/220211846966

# 바인딩 및 소스 : http://gogoke1.blog.me/220263816086

 

/*
 * mecab php바인딩후 태그와 택스트로 분리하기
 *
 * @param string $str 문자열
 * @param object mecab mecab객체
 * @param array $code 걸러내고자 하는 코드값 NNG등
 * @return array $mecab_array 배열로 리턴
 */
function mecab_incoding($str, $mecab, $code = array()){
	//사전파일 경로
	$dic = '/usr/local/lib/mecab/dic/mecab-ko-dic';
	//사전파일 세팅
	ini_set('mecab.default_dicdir', $dic);

	$mecab_array = array();
	//형태소분석하여 결과값 도출
	$result = mecab_sparse_tostr($mecab, $str);
	
	//결과값에서 줄단위로 분리
	preg_match_all('/[^EOS](.*)\n/', $result, $find_code);

	//각줄별로 루프를 돌며 텍스트와 태그(코드)값분리
	for($i=0; $i < count($find_code[0]); $i++)
	{
		preg_match('/(.*)(?=\t)/', $find_code[0][$i], $find_text); // text
		preg_match('/(?<=\t)([^\,]+)/', $find_code[0][$i], $find_tag); // tag
		//걸러내고자하는 코드가 있을시
		if(count($code) > 0)
		{
			//걸러내려는 코드안에 태그가 포함되는지
			if(in_array($find_tag[0],$code) 
				//중복되는 텍스트가 있는지
				&& in_array($find_text[0],$mecab_array) === false)
			{
				$mecab_array[] = $find_text[0];
//태그값은 필요 없어 주석
//				$mecab_array[$i]["code"] = $find_tag[0];
			}
		} else {
			//중복되는 텍스트가 있는지
			if(in_array($find_text[0],$mecab_array) === false)
			{
				$mecab_array[] = $find_text[0];
//태그값은 필요 없어 주석
//				$mecab_array[$i]["code"] = $find_tag[0];
			}
		}
	}
	//객체를 비움
	mecab_destroy($mecab);
	return $mecab_array;
}

//테스트 문자열 입력
$str = '조상의산소에서잠이든꿈, 잠을잔꿈,잠자는꿈';
$result= mecab_incoding($str, mecab_new(), array('NNG'));

//결과물 출력
echo "<pre>";
print_r($result);
echo "</pre>";

 

# 결과물

Array(   

    [0] => 조상   

    [1] => 산소   

    [2] => 잠   

    [3] => 꿈

)

 다음글 개발환경 / IDE - NetBeans & Co... (6)
 이전글 HTML 프린터 출력시 페이지 나눔 (2)

댓글

변종원(웅파) / 2017/06/14 12:49:47 / 추천 0
예전보다 많이 편해졌네요. ^^
한대승(불의회상) / 2017/06/14 13:16:45 / 추천 0
ㅎㅎㅎ 좋습니다. ^^
양승현 / 2017/06/15 19:00:33 / 추천 0
너무너무 간단하죠.. 의외로 강력합니다. ㅋ