2017-02-14 3 views
-1

다음과 같은 문자열이 있습니다.PHP로 공백이없는 문자열에서 단어를 찾는 방법은 무엇입니까?

lasvegashotel, losangelesrestaurant, ...에서

문자열처럼

는 "라스 베이거스", "호텔", "로스 앤젤레스", "레스토랑"의 단어를 가지고 ... 내가 찾아야한다

단어 위 문자열처럼 (lasvegashotel, losangelesrestaurant).

최종 목적은 내가 입력됩니다 어떤 단어를 모르는

{ 
'lasvegashotel'=>'LasVegasHotel', 
'losangelesrestaurant'=>'LosAngelesRestaurant', 
.... 
} 

입니다.

이 흥미로운 문제를 해결하는 데 도움을주십시오.

키워드는 이러한 문자열이 길지 않다는 것을 나타냅니다.

+0

단어가 최종 출력에서 ​​동일하므로 낙타 사례가 무엇입니까? – RomanPerekhrest

+0

관심을 가져 주셔서 감사합니다 ... 단어가 동일합니다 – Angel

+0

직접이 문제를 해결하려는 시도를 보여주십시오. –

답변

0

"라스베가스"와 같은 문자열이 있고 "lasvegas"및 "LasVegas"와 같은 두 개의 다른 문자열로 변환하려는 경우를 의미합니다.

이렇게하려면 먼저 str_replace 함수를 사용하여 문자열에서 모든 공백을 삭제해야합니다.
그러면 다음과 같은 코드가 생깁니다.
$basestr = "Las Vegas"; // This will be our base string $value = str_replace(" ", "", $basestr); // This removes all spaces from $basestr ans saves it as $value
그런데 말했듯이, 공백없이 낮은 케이스 버전의 문자열이 필요합니다. 이번에는 다른 함수 인 strtolower을 사용할 것입니다.

이 함수는 문자열의 모든 문자를 기본적으로 소문자로 변환하여 반환합니다.
$basestr = "Las Vegas"; // This will be our base string $value = str_replace(" ", "", $basestr); // This removes all spaces from $basestr ans saves it as $value $key = strtolower($value); // Gets a lowercased version of $value

을하지만 당신은 모든 문자열을 위해 여러 번 원하는 경우, 다음과 같은 기능을 만들 : 그래서 최종 코드는 다음과 같이하는 모든 문자열을

function getKeyAndValue($basestr) { $value = str_replace(" ", "", $basestr); // This removes all spaces from $basestr ans saves it as $value $key = strtolower($value); // Gets a lowercased version of $value return [$key => $value]; }
그리고 호출이 기능을 당신은 얻고 싶습니다.

좋은 하루 보내십시오.

편집 : 그래서 우리는 여전히 않는 str_replace 함수와하여 strtolower 기능을하지만, 다른 방법을 사용합니다

: 인해 영업 이익 문제의 내 오해로, 여기에 영업 이익이 요구하는 답해야한다.

대답은 간단합니다. 대문자로 된 소문자 단어를 대치합니다.
여기에 문자열 당 하나의 단어 (별개의 단어를 입력 할 공간이 없음)가 있다고 가정합니다.이 경우가 아니라면 내 원래 대답에서 수행하는 방법을 살펴보십시오.
foreach($wordList as $wordToCapitalize) { $basestr = str_replace(strtolower($wordToCapitalize), $wordToCapitalize); }

+0

나는이 문제를 오해하고 있다고 생각합니다. OP에는 알려진 단어 집합 (호텔, 레스토랑, 라스베가스 등)으로 구성된 공백이없는 문자열 (예 : lasvegasrestaurant)이 있습니다. 목표는 문자열에서 알려진 단어를 찾고 각 단어의 첫 글자를 대문자로 만드는 것입니다. 따라서 라스베가스 레스토랑은 LasVegasRestaurant를 반환합니다. –

+0

오, 알았어. 나는 그걸 이해하지 못했다. 그러나 이제 자본화 할 단어가 없으면 불가능합니다. – Ad5001

+0

제 이해에서 OP에는 공백이없는 문자열에서 어떤 조합으로도 사용할 수있는 알려진 단어 집합이 있습니다. –

0

해당 요구 사항을위한 견고하고 실용적인 토큰 화 솔루션은 없습니다.

https://www.youtube.com/watch?v=jBk24DI8kg0&index=4&list=PL6397E4B26D00A269

은 기본적으로 당신이 단어의 사전을 필요 했어 당신은 일치의 전면을 팝업으로 시도 할 수 있습니다 : 스탠포드 NLP에서 매우 똑똑한 사람들하여 태클에 대한 접근 방식을 다시 정말 좋은 토론이있다 문자열. 예를 들어, "lasvegashotel"에서 "las", "vegas", "hotel"로 된 사전을 갖거나 원한다면 bigram "lasvegas"를 결합 할 수도 있습니다. 그런 다음 문자열을 반복 검색하여 원본 문자열의 시작 부분부터 시작하는 더 긴 하위 문자열로 일치하는 항목을 찾아야합니다. 토큰이 식별되면 소스 문자열에서 토큰을 팝핑 한 다음 다음 일치 항목을 찾기 시작합니다.

"las"는 "lasvegas"뿐만 아니라 "lastmanstanding"에서도 토큰 화됩니다. 해결 방법이 있지만 실버 총알 솔루션은 없습니다.

+0

내 질문에 답해 주셔서 감사합니다. 좋습니다. 그러나 아직 완전한 해답이 없습니다. 모든 단어를 얻을 생각인가요? – Angel

+0

@Angel "모든 단어를 얻는 것"은 무엇을 의미합니까? 문자열에서 또는 구분되지 않은 문자열을 토큰 화하기 위해 사용할 사전에서? – arpieb

관련 문제