문제

나는 몇 가지 웹 앱이 저를 돕기 위해 글을 쓸 아이디어를 가지고 있으며, 다른 사람들은 언어를 공부하고 있기 때문에 일본어를 더 잘 배웁니다.

내 문제는이 사이트가 대부분 영어로 될 것이므로 유창한 일본어, 일반적으로 히리 가나와 카타 카나, 나중에 칸지를 혼합해야한다는 것입니다. 나는 이것을 달성하는 데 더 가까워지고 있습니다. 페이지와 소스 파일이 유니 코드 및 UTF-8 컨텐츠 유형이어야한다는 것을 알아 냈습니다.

그러나 내 문제는 실제 코딩에서 발생합니다. 내가 필요한 것은 카나 인 텍스트 줄을 조작하는 것입니다. 한 가지 예는 다음과 같습니다.

けす 동사를 가져 와서 te-form けし て로 변환해야합니다. 나는 더 많은 조작을 수행하는 데 도움이되므로 JavaScript 로이 작업을 선호하지만 DB를 전화하고 DB로 모든 것을 보관해야합니다.

제 질문은 JavaScript에서 수행하는 방법뿐만 아니라 다른 언어로 이러한 종류의 일을하는 데 도움이되는 몇 가지 팁과 전략은 무엇입니까? 나는 언어 학습 앱을 더 많이하기를 바라고 있지만, 이것에 관해서는 길을 잃었습니다.

도움이 되었습니까?

해결책

제 질문은 JavaScript에서 수행하는 방법뿐만 아니라 다른 Langauges에서 이런 종류의 일을하는 데 도움이되는 몇 가지 팁과 전략은 무엇입니까?

당신이하고 싶은 것은 Barry가 지적한 것처럼 누락 된 단어 분리기를 제외하고는 기술적 인 문제는 아니지만 매우 기본적인 문자열 조작입니다.

기본적으로, 현대적인 유니 코드 인식 프로그래밍 언어 (JavaScript는 버전 1.3 이후로됐다고 생각합니다)의 경우 일본 카나 나 칸지 사이에는 실질적인 차이가 없으며 라틴 문자는 모두 캐릭터 일뿐입니다. 그리고 문자열은 일련의 문자입니다.

어려운 곳은 문자열과 바이트 사이를 변환해야 할 때입니다. 왜냐하면 사용중인 인코딩에주의를 기울여야하기 때문입니다. 불행히도, 많은 프로그래머, 특히 영어 원어민은이 문제를 해결하는 경향이 있습니다. ASCII는 라틴 문자와 다른 인코딩에 대한 사실적인 표준 인코딩이기 때문에 일반적으로 호환되기 때문입니다. 라틴 문자가 필요한 전부라면, 캐릭터 인코딩에 대해 행복하게 무지 할 수 있으며, 바이트와 캐릭터는 기본적으로 동일한 것이 아니라고 믿고 ASCII가 아닌 모든 것을 절단하는 프로그램을 작성하십시오.

따라서 유니 코드 인식 프로그래밍의 "비밀"은 다음과 같습니다. 문자열/문자가 바이트로 그리고 어디에서 변환되는지 인식하는 법을 배우고 모든 위치에서 올바른 인코딩이 사용되는지 확인하십시오. 역전 변환 및 사용중인 모든 캐릭터를 인코딩 할 수있는 경우. UTF-8은 천천히 현지 표준이되고 있으며 일반적으로 선택할 수있는 곳마다 사용해야합니다.

전형적인 예 (비 단축) :

  • 비 ASCII 문자 리터럴로 소스 코드를 작성할 때 (편집기/IDE에서 인코딩 구성)
  • 이러한 소스 코드를 컴파일하거나 해석 할 때 (컴파일러/통역사는 인코딩을 알아야 함)
  • 파일에 문자열을 읽거나 쓰는 경우 (인코딩은 API 또는 파일의 메타 데이터 어딘가에 지정되어야합니다)
  • 데이터베이스에 문자열을 작성할 때 (인코딩은 DB 또는 테이블의 구성에 지정되어야합니다)
  • Webserver를 통해 HTML 페이지를 전달할 때 (인코딩은 HTML 헤더 또는 페이지의 메타 헤더에 지정되어야합니다. 양식은 훨씬 더 까다로울 수 있음)

다른 팁

  • 유니 코드와 UTF-8을 어디에서나 고수하십시오.
  • EUC-JP, ShiftJis, ISO-2022-JP와 같은 일본 원어민 인코딩에서 멀리 떨어져 있지만 계속하면 어느 시점에서 발생할 수 있습니다.
  • POS 분석, 단어 세분화 등과 같은 복잡한 작업을 수행하기위한 세그먼트에 익숙해 지십시오. NLP (자연어 처리) 작업을 수행하는 대부분의 사람들이 사용하는 표준 도구는 인기/힘의 순서대로입니다.

메카브 (원래 Sourceforge) 굉장합니다 : 그것은 당신이 같은 텍스트를 가져갈 수 있습니다.

「日本語は、とても難しいです。」

그리고 모든 종류의 훌륭한 정보를 되 찾으십시오

kettle:~$ echo 日本語は、難しいです | mecab 
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
は   助詞,係助詞,*,*,*,*,は,ハ,ワ
、   記号,読点,*,*,*,*,、,、,、
難しい 形容詞,自立,*,*,形容詞・イ段,基本形,難しい,ムズカシイ,ムズカシイ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
EOS

기본적으로 연사 부품, 판독, 발음 등의 상세한 런 다운입니다. 또한 동사 시제 분석에 호의를 베풀 것입니다.

kettle:~$ echo メキシコ料理が食べたい | mecab 
メキシコ    名詞,固有名詞,地域,国,*,*,メキシコ,メキシコ,メキシコ
料理  名詞,サ変接続,*,*,*,*,料理,リョウリ,リョーリ
が   助詞,格助詞,一般,*,*,*,が,ガ,ガ
食べ  動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
たい  助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
EOS

그러나 문서는 모두 일본어로되어 있으며 원하는 방식으로 출력을 포맷하는 방법을 설정하고 파악하는 것이 약간 복잡합니다. Ubuntu/Debian에 사용할 수있는 패키지가 있으며 Perl, Python, Ruby 등 다양한 언어로 바인딩이 있습니다.

우분투에 대한 apt-repos :

deb http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all
deb-src http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all

설치할 패키지 :$ apt-get install mecab-ipadic-utf8 mecab python-mecab

내가 생각하는 트릭을해야합니다.

Mecab의 다른 대안은 Chasen, 몇 년 전에 Mecab (우연히 Google에서 일하는)의 저자가 작성한 것과 카카시, 훨씬 덜 강력합니다.

나는 자신의 컨쥬 게이션 루틴을 굴리는 것을 피하려고 노력할 것입니다. 이것의 문제는 단지 다른 사람들이 이미 수행 한 톤과 톤의 작업이 필요하다는 것입니다. 그리고 모든 가장자리 케이스를 규칙으로 다루는 것은 하루가 끝날 무렵 불가능하다는 것입니다.

Mecab은 통계적으로 구동되며 많은 데이터에 대해 교육을 받았습니다. 그것은 정교한 기계 학습 기술을 사용합니다 조건부 임의의 필드 (CRFS) 그리고 결과는 정말 좋습니다.

일본인과 즐겁게 지내십시오. 나는 당신의 일본인이 얼마나 좋은지 잘 모르겠지만, Mecab의 문서에 대한 도움이 필요하거나 그에 대해 자유롭게 물어보십시오. Kanji는 처음에 상당히 위협적 일 수 있습니다.

당신이해야 할 일은 문법의 규칙을 보는 것입니다. 각 컨쥬 게이션에 대한 규칙 배열이 있습니다. 예를 들어 て 〜 양식을 봅시다. psudocode :

def te_form(verb)
  switch verb.substr(-1, 1) == "る" then return # verb minus ru plus te
  case "る" #return (verb - る) + て
  case "す" #return (verb - す)+して

기본적으로, I 형, II 및 III 동사로 분해하십시오.

당신의 질문은 나에게 완전히 불분명합니다.

그러나 나는 일본어로 일한 경험이 있었기 때문에 2 센트를 줄 것입니다.

일본어 텍스트는 단어 분리 (예 : 공간 문자)를 특징으로하지 않기 때문에, 우리가 획득해야 할 가장 중요한 도구는 사전 기반 단어 인식기입니다.

텍스트를 분할하면 "일반적인"도구로 텍스트를 조작하는 것이 더 쉽습니다.

위의 도구는 2 개의 도구 만 있었고, 부산물로서 그들은 또한 tagger (예 : 명사, 동사 등)로 작동했습니다.

편집 : Wanceragers 작업 할 때는 항상 유니 코드를 사용하십시오.

내가 올바르게 기억한다면 (그리고 일본인을 찍어서 틀릴 수 있도록 일본인을 많이 느슨해졌다), 당신이하고 싶은 대체품은 단어의 마지막 기호에 의해 결정됩니다. 첫 번째 예를 들어, 'す'로 끝나는 동사는 이런 식으로 결합 될 때 항상 'し て'가 있습니다. 유사하게 >-> ん で で. 마지막 문자 (들) -> 공액 형식의 매핑을 설정할 수 있습니다. xx っ て て에 접합하는 것과 같은 예외를 설명해야 할 수도 있습니다.

언어 간의 이식성은 언어가 작동 방식에 따라 다르게 논리를 구현해야합니다. 컨쥬 게이션은 동사가 -ar, -er, 또는 -ir로 끝나는 지에 따라 달라지기 때문에이 솔루션은 스페인어를 구현하기에 상당히 간단 할 것입니다 (일부 동사가 논리에 예외가 필요한 동사). 불행히도, 그것이 내 다국어 기술의 한계이므로, 그 두 가지를 넘어서 얼마나 잘 될지 모르겠습니다.

일본어로 된 대부분의 동사는 예측 가능한 작은 패턴 중 하나를 따르기 때문에 주어진 동사의 모든 형태를 생성하는 가장 쉽고 확장 가능한 방법은 동사가 어떤 컨쥬 게이션을 따라야하는지 알 수 있도록하는 것입니다. 컨쥬 게이션에.

의사 코드 :

generateDictionaryForm(verb)
  case Ru-Verb: verb.stem + る
  case Su-Verb: verb.stem + す
  case Ku-Verb: verb.stem + く
  ...etc.

generatePoliteForm(verb)
  case Ru-Verb: verb.stem + ります
  case Su-Verb: verb.stem + します
  case Ku-Verb: verb.stem + きます
  ...etc.

불규칙한 동사는 물론 특별한 시사입니다.

이것의 일부 변형은 다른 일반 언어 (예 : 영어가 아닌)에 효과적입니다.

내 보석 (ROM2Jap)을 설치하십시오. 루비에 있습니다.

gem install rom2jap

터미널을 열고 유형 :

require 'rom2jap'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top