누구든지 좋은 적절한 케이스 알고리즘을 가지고 있습니까?

StackOverflow https://stackoverflow.com/questions/32149

  •  09-06-2019
  •  | 
  •  

문제

누군가 신뢰할 수있는 Proper Case 또는 PCase 알고리즘 (UCase 또는 Upper와 유사)을 가지고 있습니까?"GEORGE BURDELL" 또는 "george burdell"와 같은 값을 가져 와서 "George Burdell"로 바꾸는 것을 찾고 있습니다.

간단한 케이스를 처리하는 간단한 케이스가 있습니다.이상은 "O'REILLY"와 같은 것을 처리하고 "O'Reilly"로 변환 할 수있는 무언가를 갖는 것입니다.하지만 저는 그것이 더 힘들다는 것을 압니다.

저는 일을 단순화한다면 주로 영어에 집중합니다. <시간>

업데이트 : C #을 언어로 사용하고 있지만 거의 모든 것을 변환 할 수 있습니다 (기능이 존재한다고 가정).

맥도날드의 시나리오가 어렵다는 데 동의합니다.O'Reilly 예제와 함께 언급하려고했지만 원래 게시물에는 언급하지 않았습니다.

도움이 되었습니까?

해결책

귀하의 질문을 오해하지 않는 한, 귀하가 직접 질문 할 필요가 없다고 생각합니다. TextInfo 클래스가 대신 해드릴 수 있습니다. 라코 디스

'George Burdell'을 반환합니다. 특별한 규칙이있는 경우 자신의 문화를 사용할 수 있습니다.

업데이트 : Michael (이 답변에 대한 의견에서)은 다음과 같이 지적했습니다.메서드가 두문자어라고 가정하므로 입력이 모두 대문자이면 작동하지 않습니다.이에 대한 순진한 해결 방법은 ToTitleCase에 제출하기 전에 텍스트를 .ToLower ()하는 것입니다.

다른 팁

@Zack : 별도의 답장으로 게시하겠습니다.

다음은 kronoz의 게시물을 기반으로 한 예입니다. 라코 디스

제목 대소 문자를 구분하는 텍스트를위한 깔끔한 Perl 스크립트도 있습니다.

http://daringfireball.net/2008/08/title_case_update <인용구> 라코 디스

하지만 적절한 경우에는 .. 사람들의 이름 만 으로 사용하는 것 같습니다.

오늘 작업중인 앱에서 구현하기 위해이 글을 작성했습니다.이 코드는 주석으로 꽤 자명하다고 생각합니다.모든 경우에 100 % 정확하지는 않지만 대부분의 서양 이름을 쉽게 처리합니다.

예 :

mary-jane => Mary-Jane

o'brien => O'Brien

Joël VON WINTEREGG => Joël von Winteregg

jose de la acosta => Jose de la Acosta

코드는 필요에 맞게 상단의 배열에 문자열 값을 추가 할 수 있다는 점에서 확장 가능합니다.그것을 연구하고 필요한 특수 기능을 추가하십시오. 라코 디스

https://github.com/tamtamchik/namecase 의 빠른 C # 포트를 수행했습니다.Lingua :: EN :: NameCase를 기반으로합니다. 라코 디스

사용량 라코 디스

이것은 내 테스트 방법이며 모든 것이 정상적으로 통과하는 것 같습니다. 라코 디스

어떤 프로그래밍 언어를 사용하십니까? 많은 언어에서 정규식 일치에 대한 콜백 함수를 허용합니다. 이들은 쉽게 일치를 적절하게하는 데 사용할 수 있습니다. 사용되는 정규식은 매우 간단합니다. 다음과 같이 모든 단어 문자와 일치하면됩니다. 라코 디스

또는 이미 첫 번째 문자를 추출하여 추가 일치 항목으로 만들 수 있습니다. 라코 디스

이제 매치에서 첫 번째 캐릭터와 연속되는 캐릭터에 개별적으로 액세스 할 수 있습니다. 그런 다음 콜백 함수는 단순히 히트의 연결을 반환 할 수 있습니다. 의사 Python에서 (실제로 Python을 모릅니다) : 라코 디스

부수적으로 "O '와"Reilly "가 개별적으로 일치하고 둘 다 적절한 경우가 있기 때문에"O'Reilly "의 경우도 처리됩니다. 그러나 알고리즘에 의해 잘 처리되지 않는 다른 특수한 경우가 있습니다. "McDonald 's"또는 일반적으로 어 포스트 로프 된 단어. 알고리즘은 후자에 대해 "Mcdonald 'S"를 생성합니다. 아포스트로피에 대한 특수 처리를 구현할 수 있지만 첫 번째 경우를 방해합니다. 완벽한 해결책을 찾는 것은 불가능합니다. 실제로는 아포스트로피 뒤 부분의 길이를 고려하는 데 도움이 될 수 있습니다.

다음은 순진한 C # 구현입니다 .- 라코 디스

각 단어의 첫 글자를 대문자로 바꾸는 간단한 방법 (공백으로 구분) 라코 디스

당신이 준 "O'REILLY"예를 잡는 관점에서 공백과 '둘 다에서 문자열을 분할하면 아포 스타 프 뒤에 나타난 모든 문자, 즉 Fred의 s를 대문자로 표시하므로 작동하지 않습니다.

그래서 나는 아마 다음과 같은 것을 시도 할 것이다 라코 디스

이것은 O'Reilly, O'Clock, O'Donnell 등이 도움이되기를 바랍니다.

이 코드는 테스트되지 않았습니다.

크로노 즈, 감사합니다.나는 당신의 기능에서 다음과 같은 줄을 발견했습니다. 라코 디스

반드시 라코 디스

따라서 "información"은 "InforMacIón"으로 변경되지 않습니다.

최고

엔리케

나는 이것을 텍스트 상자의 textchanged 이벤트 핸들러로 사용합니다."McDonald"항목 지원 라코 디스

여기에 많은 좋은 답변이 있습니다.내 것은 매우 간단하며 우리 조직에있는 이름 만 고려합니다.원하는대로 확장 할 수 있습니다.이것은 완벽한 솔루션이 아니며 밴쿠버를 VanCouver로 변경하는 것은 잘못된 것입니다.사용하는 경우 조정하십시오.

여기에 C #의 솔루션이 있습니다.이렇게하면 이름이 프로그램에 하드 코딩되지만 약간의 작업으로 프로그램 외부에 텍스트 파일을 보관하고 이름 예외 (예 : Van, Mc, Mac)를 읽고 반복 할 수 있습니다. 라코 디스

이 스레드가 한동안 열려 있다는 것을 알고 있지만,이 문제에 대한 조사를하다가이 멋진 사이트를 발견했습니다.이 사이트를 통해 이름을 붙여 넣어 매우 빠르게 대문자로 표시 할 수 있습니다. https://dialect.ca/code/name-case/ .유사한 연구 / 프로젝트를 수행하는 다른 사람들이 참조 할 수 있도록 여기에 포함시키고 싶었습니다.

그들은 다음 링크에서 PHP로 작성한 알고리즘을 공개합니다 : https : //dialect.ca/code/name-case/name_case.phps

예비 테스트를 통해 코드를 읽은 결과 상당히 철저한 것으로 나타났습니다.

솔루션을 원하는 언어를 언급하지 않았으므로 여기에 의사 코드가 있습니다. 라코 디스

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