행맨 난이도에 대한 단어를 "쉬움", "중간"또는 "어려움"으로 분류하는 알고리즘


114

행맨 게임에서 단어의 "난이도"를 결정하여 게임이 지정된 난이도와 일치하는 단어를 선택할 수 있도록하는 좋은 알고리즘은 무엇입니까?

난이도는 필요한 추측 횟수, 문자 사용의 상대적 빈도 (예 : 흔하지 않은 문자가 많은 단어는 추측하기 어려울 수 있음) 및 잠재적으로 단어 길이와 관련이있는 것 같습니다.

단어가 플레이어의 어휘에 포함될 가능성과 같은 보상 (시도) 할 주관적인 요소도 있으며,이를 인식 할 수있어 글자 빈도 만 기반으로 한 추측 전략에서 목록 기반 추측으로 이동할 수 있습니다. 알려진 일치하는 단어.

지금 내 시도는 루비 아래에 있습니다. 분류를 개선하는 방법에 대한 제안이 있습니까?

def classify_word(w)
  n = w.chars.to_a.uniq.length # Num. unique chars in w
  if n < 5 and w.length > 4
    return WordDifficulty::Easy
  end
  if n > w.length / 2
    return WordDifficulty::Hard
  else
    return WordDifficulty::Medium
  end
end

나는 아이들이 플레이하기를 바라는 행맨 게임을 작성하고 있습니다. 나는 "숙제"를 시도하기에는 너무 나이가 많기 때문에 질문이 너무 많은 반대표를받는 이유 일 수 있습니다 ... 단어는 많은 모호한 단어가 포함 된 큰 단어 데이터베이스에서 무작위로 추출되며 난이도에 따라 필터링됩니다. 단어를 결정했습니다.


12
왜 반대 투표입니까? 이것은 괜찮은 질문입니다. 나는 같은 난이도 기능을 만들 것 f(w) = (# unique letters) * (7 - # vowels) * (sum of the positions of unique letters in a list, ordered by frequency)입니다. 거기에서 함수의 범위를 3 개의 세그먼트로 나누고이를 어려움이라고 부를 수 있습니다.
Blender

2
나는 당신이 이것을 위해 웹 검색을하도록 제안 할 것입니다. 단어의 복잡성을 계산 /보고하는 것을 주장하는 알고리즘이나 사전이있을 것입니다. 긴 텍스트가 있다는 것을 알고 있습니다.
Hot Licks 2013

3
관련 : youtube.com/watch?v=bBLm9P-ph6U (QI XL - 가장 어려운 말씀 교수형 집행 인으로 추측)
클로스 Jørgensen은

5
무엇을하든 EXTINCTIONSPECTROPHOTOPOLERISCOPEOCCULOGRAVOGYROKYNETOMETER를 포함해야합니다.
Hot Licks 2013

2
Ruby에 익숙하지 않은 사용자를 위해 방법의 첫 번째 줄이 무엇을하는지 설명하고 싶습니까? n = w.chars.to_a.uniq.length고유 한 문자의 수를 계산합니까?
T Nguyen

답변:


91

1. 소개

여기에이 문제에 체계적으로 접근하는 방법이 있습니다. 행맨을 잘하는 알고리즘이 있다면, 각 단어의 난이도를 그 단어를 추측 할 때 프로그램이 취할 수있는 잘못된 추측의 수로 삼을 수 있습니다.

2. 교수형 집행 전략에 제쳐두고

다른 답변과 댓글에 내재 된 아이디어가 있습니다. 솔버를위한 최적의 전략은 영어 글자의 빈도 또는 일부 말뭉치의 단어 빈도에 따라 결정을 내리는 것입니다. 이것은 매혹적인 생각이지만 옳지 않습니다. 솔버는 setter가 선택한 단어의 분포를 정확하게 모델링 하고, 인간 setter는 자주 사용되는 문자의 희소성 또는 회피를 기반으로 단어를 선택하는 것이 가장 좋습니다 . 하지만 예를 들어, E영어에서 가장 자주 사용되는 문자입니다, 세터는 항상 단어에서 선택하는 경우 JUGFUL, RHYTHM, SYZYGY, 그리고 ZYTHUM다음, 완벽한 해결사는 추측에 의해 시작되지 않습니다 E!

세터를 모델링하는 가장 좋은 방법은 컨텍스트에 따라 다르지만 어떤 종류의 베이지안 유도 추론은 솔버가 동일한 세터 또는 유사한 세터 그룹에 대해 많은 게임을하는 상황에서 잘 작동 할 것이라고 생각합니다.

3. 행맨 알고리즘

여기에서는 꽤 훌륭하지만 완벽하지는 않은 솔버를 간략하게 설명하겠습니다. 고정 사전에서 균일하게 단어를 선택하는 세터를 모델링합니다. 그것은이다 욕심 알고리즘 : 각 단계에서 그것이 미스, 추측를 포함하지 않는 단어의 수를 최소화하는 편지를 추측. 예를 들어 지금까지 추측이 이루어지지 않았고 가능한 단어가 DEED, DEADDARE이면 다음과 같습니다.

  • 당신이 생각하는 경우 D또는 E, 더 미스 없다;
  • 추측하면 A하나의 미스 ( DEED);
  • 추측하면 R두 가지 미스 ( DEEDDEAD);
  • 다른 문자를 맞히면 세 가지 누락이 있습니다.

따라서 D또는 E이 상황에서 좋은 추측입니다.

( 행맨에서 올바른 추측은 무료라는 점을 지적 해 주신 Panic 대령 에게 감사드립니다. 첫 시도에서 이것을 완전히 잊었습니다!)

4. 구현

다음은이 알고리즘을 Python으로 구현 한 것입니다.

from collections import defaultdict
from string import ascii_lowercase

def partition(guess, words):
    """Apply the single letter 'guess' to the sequence 'words' and return
    a dictionary mapping the pattern of occurrences of 'guess' in a
    word to the list of words with that pattern.

    >>> words = 'deed even eyes mews peep star'.split()
    >>> sorted(list(partition('e', words).items()))
    [(0, ['star']), (2, ['mews']), (5, ['even', 'eyes']), (6, ['deed', 'peep'])]

    """
    result = defaultdict(list)
    for word in words:
        key = sum(1 << i for i, letter in enumerate(word) if letter == guess)
        result[key].append(word)
    return result

def guess_cost(guess, words):
    """Return the cost of a guess, namely the number of words that don't
    contain the guess.

    >>> words = 'deed even eyes mews peep star'.split()
    >>> guess_cost('e', words)
    1
    >>> guess_cost('s', words)
    3

    """
    return sum(guess not in word for word in words)

def word_guesses(words, wrong = 0, letters = ''):
    """Given the collection 'words' that match all letters guessed so far,
    generate tuples (wrong, nguesses, word, guesses) where
    'word' is the word that was guessed;
    'guesses' is the sequence of letters guessed;
    'wrong' is the number of these guesses that were wrong;
    'nguesses' is len(guesses).

    >>> words = 'deed even eyes heel mere peep star'.split()
    >>> from pprint import pprint
    >>> pprint(sorted(word_guesses(words)))
    [(0, 1, 'mere', 'e'),
     (0, 2, 'deed', 'ed'),
     (0, 2, 'even', 'en'),
     (1, 1, 'star', 'e'),
     (1, 2, 'eyes', 'en'),
     (1, 3, 'heel', 'edh'),
     (2, 3, 'peep', 'edh')]

    """
    if len(words) == 1:
        yield wrong, len(letters), words[0], letters
        return
    best_guess = min((g for g in ascii_lowercase if g not in letters),
                     key = lambda g:guess_cost(g, words))
    best_partition = partition(best_guess, words)
    letters += best_guess
    for pattern, words in best_partition.items():
        for guess in word_guesses(words, wrong + (pattern == 0), letters):
            yield guess

5. 예제 결과

이 전략을 사용하면 컬렉션의 각 단어를 추측하는 어려움을 평가할 수 있습니다. 여기에서 시스템 사전의 6 자 단어를 고려합니다.

>>> words = [w.strip() for w in open('/usr/share/dict/words') if w.lower() == w]
>>> six_letter_words = set(w for w in words if len(w) == 6)
>>> len(six_letter_words)
15066
>>> results = sorted(word_guesses(six_letter_words))

이 사전에서 추측하기 가장 쉬운 단어 (솔버가 추측하는 데 필요한 일련의 추측과 함께)는 다음과 같습니다.

>>> from pprint import pprint
>>> pprint(results[:10])
[(0, 1, 'eelery', 'e'),
 (0, 2, 'coneen', 'en'),
 (0, 2, 'earlet', 'er'),
 (0, 2, 'earner', 'er'),
 (0, 2, 'edgrew', 'er'),
 (0, 2, 'eerily', 'el'),
 (0, 2, 'egence', 'eg'),
 (0, 2, 'eleven', 'el'),
 (0, 2, 'enaena', 'en'),
 (0, 2, 'ennead', 'en')]

가장 어려운 단어는 다음과 같습니다.

>>> pprint(results[-10:])
[(12, 16, 'buzzer', 'eraoiutlnsmdbcfg'),
 (12, 16, 'cuffer', 'eraoiutlnsmdbpgc'),
 (12, 16, 'jugger', 'eraoiutlnsmdbpgh'),
 (12, 16, 'pugger', 'eraoiutlnsmdbpcf'),
 (12, 16, 'suddle', 'eaioulbrdcfghmnp'),
 (12, 16, 'yucker', 'eraoiutlnsmdbpgc'),
 (12, 16, 'zipper', 'eraoinltsdgcbpjk'),
 (12, 17, 'tuzzle', 'eaioulbrdcgszmnpt'),
 (13, 16, 'wuzzer', 'eraoiutlnsmdbpgc'),
 (13, 17, 'wuzzle', 'eaioulbrdcgszmnpt')]

이것이 어려운 이유는 추측 한 후에도 -UZZLE7 가지 가능성이 남아 있기 때문입니다 .

>>> ' '.join(sorted(w for w in six_letter_words if w.endswith('uzzle')))
'buzzle guzzle muzzle nuzzle puzzle tuzzle wuzzle'

6. 단어 목록 선택

물론 자녀를위한 단어 목록을 준비 할 때 컴퓨터의 시스템 사전으로 시작하지 않을 것입니다. 자녀가 알 가능성이있는 단어 목록으로 시작합니다. 예를 들어, 다양한 영어 말뭉치에서 가장 자주 사용되는 단어 목록을 위키 셔 너리에서 살펴볼 수 있습니다 .

예를 들어, 2006 년 현재 구텐베르크 프로젝트에서 가장 많이 사용 되는 10,000 개의 단어 중 1,700 개의 6 글자 단어 중 가장 어려운 10 개 단어 는 다음과 같습니다.

[(6, 10, 'losing', 'eaoignvwch'),
 (6, 10, 'monkey', 'erdstaoync'),
 (6, 10, 'pulled', 'erdaioupfh'),
 (6, 10, 'slaves', 'erdsacthkl'),
 (6, 10, 'supper', 'eriaoubsfm'),
 (6, 11, 'hunter', 'eriaoubshng'),
 (6, 11, 'nought', 'eaoiustghbf'),
 (6, 11, 'wounds', 'eaoiusdnhpr'),
 (6, 11, 'wright', 'eaoithglrbf'),
 (7, 10, 'soames', 'erdsacthkl')]

(Soames Forsyte는 John GalsworthyForsyte Saga에 등장하는 캐릭터입니다 . 단어 목록이 소문자로 변환되어 고유 이름을 빨리 제거 할 수 없었습니다.)


1
자주 사용되는 단어 목록에 대한 좋은 전화. invokeit.wordpress.com/frequency-word-lists 에는 영어와 스웨덴어가 있으므로 둘 다 있으면 좋습니다.
grrussel

1
내가 기대하는 것 bingle보다 더 열심히 평가 될 single또는 tingle- bingle덜 일반적인 단어 b 덜 일반적인 문자
BlueRaja - 대니 Pflughoeft

5
멋진 알고리즘 (코드를 작성하기 전에 영어로 설명해 주셔서 감사합니다!). 하지만 잘못된 추측 의 수를 최소화해야한다고 생각합니다 . 따라서 사전이 [bat, bet, hat, hot, yum]이면 'T'(B, A 또는 H가 아닌)를 추측합니다. 내가 옳다면 비용이 들지 않습니다. 내가 틀렸다면 '음'만 남습니다.
Colonel Panic

8
이것은 정말 멋진 알고리즘이지만 인간 플레이어가 할 가능성이있는 전략을 반영하지 않는다고 생각합니다. 모든 단어를 아는 대신 인간은 (확률 적으로) 가장 일반적인 단어를 인식하고 그렇지 않으면 충분하고 접두사 (예 : ion, ing) 및 일반적인 문자를 추측하는 실패 (모음으로 시작하여 t / r / s / n / etc 수행). 확실하지 코드이 만의 일이 :)에 대해 생각하는 방법
Patashu

2
훌륭한 분석. @Patashu가 지적했듯이, 이것을 더 좋게 만드는 다음 단계는 일반적인 단어의 사전을 가져가는 것보다, 단어의 전체 사전을 가져 가지만 공통성에 대한 주석을 가지고, 단순히 단어의 공통성을 경험적으로 평가하는 것입니다. 편지 배포 어려움. 그러나 이것은 단지 선택적 개선을위한 것입니다. 이것은 이미 현존하는 훌륭한 솔루션입니다.
Ben Lee

21

정말 간단한 방법은 단어의 모음 부족, 고유 문자 수 및 각 문자의 공통성을 기반으로 점수를 계산하는 것입니다.

letters = 'etaoinshrdlcumwfgypbvkjxqz'
vowels = set('aeiou')

def difficulty(word):
    unique = set(word)
    positions = sum(letters.index(c) for c in word)

    return len(word) * len(unique) * (7 - len(unique & vowels)) * positions

words = ['the', 'potato', 'school', 'egypt', 'floccinaucinihilipilification']

for word in words:
    print difficulty(word), word

그리고 출력 :

432 the
3360 potato
7200 school
7800 egypt
194271 floccinaucinihilipilification

그런 다음 다음과 같이 단어를 채점 할 수 있습니다.

        score < 2000   # Easy
 2000 < score < 10000  # Medium
10000 < score          # Hard

안녕 블렌더, 마법의 숫자 7이 뭔지 말씀해 주 시겠어요? 왜 6 개나 50 개가 아닌가? 다른 약식 번호를 입력하면 어떻게됩니까?
Pavan 2014 년

@Pavan : 정말 아무것도 없습니다. 모든 단어의 점수가 같은 양만큼 올라갑니다.
Blender

예, 온라인 파이썬 실행자와 놀 때 변화를 느꼈습니다. 나는 무언가를 알아 차렸고 그것은 내가 혐오스러운 것에 비해 fantastical 같은 것을 타이핑했을 때, 혐오스러운 것은 더 정확하게 철자가 된 단어 임에도 불구하고 환상적인 것보다 낮은 값을 가질 것이므로 단어 게임에서 낮은 난이도로 나타나야합니다. 이것은 난이도가 주관적이라는 것을 깨닫게했지만 다른 단어보다 철자가 가장 어려운 단어를 설명하기 위해 일종의 연구가 이루어져야한다고 생각했습니다. 그런 연구 pls를 가르쳐 주시겠습니까?
Pavan 2014 년

또는 적어도 첫 번째 시도에서 단어 철자를 잘못 입력 한 사람들의 비율로 단어 모음을 찾는 데 어려움을 겪고 있기 때문에 그런 연구가 무엇이라고 부르겠습니까?
Pavan 2014 년

9

사용할 수 있습니다 몬테카를로 방법 을단어의 난이도를 추정.

  • 매번 무작위 문자를 추측하고 목표 언어로 된 문자의 빈도에 따라 가중치를 부여하여 게임을 시뮬레이션하고 무작위 플레이어가 솔루션에 도달하는 데 걸린 추측 횟수를 세십시오. 추측 할 때마다 문자가 제거되므로이 프로세스는 유한하며 1에서 26까지의 숫자를 반환합니다.
  • 이 과정을 반복합니다 2*N.N 단어 의 고유 한 문자 수입니다 .
  • 결과를 평균하여 점수를 계산하십시오. 2*N실행 ,
  • 복잡성 수준을 결정합니다. 10 점 미만의 점수는 쉬운 단어를 나타내고 16 점 이상의 점수는 어려운 단어를 나타냅니다. 다른 모든 것은 중간입니다.

2
잘못된 추측 만 세어야한다고 생각합니다 . 정확한 추측에 대한 패널티는 없습니다.
Colonel Panic

왜 그렇게 반복됩니까? 나는이 전략 (대부분의 무작위 전략과 마찬가지로)이 짧은 단어에 대해 큰 분산을 가지고 있다고 생각합니다 .
Colonel Panic

@ColonelPanic 총 추측 수를 세는 것이 더 낫다고 생각합니다. 자연스럽게 고유 한 문자의 수를 답에 통합하기 때문입니다. 더 짧은 단어에 대한 분산이 더 높다는 것에 대해 당신이 맞을 수 있습니다. 아마도 반복 횟수를 수정해야 할 것입니다. 그러나 2N은 괜찮은 출발이라고 생각합니다.
dasblinkenlight 2013

4

동일한 주제에 대한 이전 유사한 토론 : 영어 단어의 난이도 결정

나는 링크 ^의 끝에있는 대답을 좋아한다. 어린이 행맨 게임의 경우 스크래블과 같은 접근 방식을 적용하십시오.

각 문자에 점수 값을 할당 한 다음 문자를 더하면됩니다.


1
이것은 쉬운 수준에서 희귀하거나 모호한 단어를 피하는 것과 함께 현재 앞으로 나아갈 길처럼 보입니다. 내가 언급하지 않은 문제는 단어가 거대한 사전에서 선택되었다는 것입니다. 그 단어의 대부분은 정의상 거의 사용되지 않는 단어 여야합니다. :-)
grrussel

포인트 값이 작동하여 문자 빈도를 사용할 수 있습니다. 그러나 일반적으로 사용되는 일부 단어는 실제로 이상하게 높은 점수를 가질 수 있습니다.
Nuclearman 2013

3

얼마 전에 저는 명백한 알고리즘을 사용하여 행맨 솔버를 작성했습니다. 가능한 모든 단어의 초기 사전이 주어지면 매 차례 사전에 남아있는 대부분의 단어에서 발생하는 문자를 선택한 다음 일치하지 않는 단어를 제거합니다 ( 응답) 사전에서.

알고리즘은 이처럼 간단하지 않습니다. 사전에 같은 수의 단어에 각각 나타나는 여러 글자가 종종 있기 때문입니다. 이 경우 문자 선택에 따라 단어에 필요한 추측 횟수가 크게 달라질 수 있습니다. 해당 문자의 배치에 대한 결과 정보 (실제로 단어에있는 경우)가 시스템에 대한 최대 정보 (최대 정보 엔트로피가 있는 문자)를 제공하는 최대 값을 선택 합니다. . 예를 들어 남은 두 단어가 '백과 사전'과 '백과 사전'인 경우 문자 'c'는 e, n, y, l, o, p, e, d, i와 동일한 확률로 나타날 수 있습니다 (즉, 하지만 0이 아닌 정보 엔트로피를 가지고 있기 때문에 먼저 'c'에 대해 물어봐야합니다.

소스 (C ++, GPL)는 여기

이 모든 결과는 각 단어에 필요한 추측 수와 함께 단어 목록입니다 : 난이도 .txt (630KB). 이 알고리즘에서 가장 찾기 어려운 단어는 "will"(14 개의 추측 실패)입니다. i와 double l은 꽤 빨리 추측되지만 옵션에는 bill, dill, fill, gill, hill, kill, mill, pill, rill, till, will이 포함되며, 그때부터 유일한 옵션은 각 문자를 추측하는 것입니다. 회전. 다소 반 직관적으로 긴 단어는 훨씬 더 빨리 추측됩니다 (선택할 수있는 단어가 없습니다).

물론 인간의 행맨 게임에서 심리학 (및 어휘의 폭)은이 알고리즘이 설명하는 것보다 훨씬 더 큰 역할을합니다.


3

그냥 해! 단어에 대해 행맨을 연주하십시오. 이기는 데 얼마나 많은 몰수 (예 : 잘못된 추측)가 필요한지 세십시오.

플레이하려면 전략이 필요합니다. 여기에 인간 (같은) 전략이 있습니다. 사전에서 지금까지 공개 된 내용에 맞지 않는 모든 단어를 제거하세요. 남은 단어 중 가장 자주 쓰이는 글자를 맞춰보세요.

전략이 무작위 화 된 경우 측정 값을 예상 몰수 수로 정의하고이를 경험적으로 추정 할 수 있습니다.


몇 년 전에 작성한 행맨 봇의 또 다른 결정 론적 전략 입니다. 추측이 잘못된 경우 남아있는 단어 수를 최소화하는 문자를 추측합니다 (즉, 최악의 경우 최적화). 오늘 저는이 전략이 너무 기계적인 것이 싫고 위의 전략을 선호합니다.


하하, 저도 똑같은 것을 제안하려고 했어요. 그러나 진지한 버전 : 간단한 전략을 사용하여 추측하는 간단한 봇을 작성한 다음 사전에있는 단어에 대해 여러 번 실행하십시오.
Tikhon Jelvis 2013

네, 그게 제가 의미하는 바입니다!
Colonel Panic

2

먼저, 고유 한 문자 목록을 생성합니다. 그런 다음 빈도 (영어 또는 모든 언어-이에 대한 목록이 있음 ) 별로 정렬하고, 빈도 가 낮은 문자는 어려움이 더 높습니다.

그런 다음 더하기, 곱하기 또는 다른 구성표를 사용하여 점수를 결합할지 결정해야합니다.


(실제로 빈도별로 정렬 할 필요는 없지만 빈도 점수를 모을 수 있습니다. 정렬이 더 많은 정보를 제공 할 수도 있지만-당신을 위해 뭔가를 할 수 있는지 확인해 볼 가치가 있습니다.)
Hot Licks

그리고 어떻게 든 문자 콤보를 설명 할 수 있습니다. 즉, Q가 있으면 거의 확실하게 U가 있고 U는 Q를 훨씬 더 많이 만듭니다. 따라서 예를 들어 QU를 주파수 POV에서 단일 문자로 간주하는 것이 합리적 일 수 있습니다.
Hot Licks 2013

1

매우 복잡한 알고리즘을 구축해달라고 요청했기 때문에 비추천을 받고 있습니다.

3 개의 배열 (easy, medium, hard)을 만들고 각각 100 개 정도의 단어로 채우는 것이 어떻습니까? 20 분 정도 걸립니다.

나는 당신의 아이들이 수백 게임을 끝내기 오래 전에 교수형 남자가 지루해질 것이라고 약속합니다 ... : D


3
그렇게 복잡 할 필요는 없습니다 . 예를 들어 Blender의 의견을 살펴보십시오. 귀하의 답변은 핵심 질문을 실제로 다루지 않으며 특히 유용하지 않습니다.
Tikhon Jelvis

4
"쉬운, 중간, 하드) 3 개의 어레이를 만들고 각각 100 개 정도의 단어로 채우지 않는 이유는 무엇입니까?": "문제가 이미 해결되었다고 가정하여 문제 해결"방법이라고도합니다.
Pascal Cuoq 2013

비판을 받았습니다. 감사합니다 ... 학문적 인 관점에서 볼 때 당신이 절대적으로 옳은 것 같아요. 제 대답은 아무것도 해결하지 못합니다. 그러나 실용적인 관점, 즉 자녀를위한 행맨 게임을 만드는 가장 쉬운 방법에서 제 대답은 저렴하고 빠르게 해결합니다.
BBagi

1
@PascalCuoq 또는 이것이 "인간이 알고리즘보다 적합한 목록을 선택하는 데 더 좋다고 가정하여 문제를 해결하는"접근 방식이라고 말할 수 있습니다. 질문자가 어린 이용 게임을 원한다는 점을 감안할 때 "모자, 고양이, 태양"이 쉬운 목록에 있고 "실로폰, nought, 학교"가 어려운 목록에있는 것이 더 나은 것 같습니다. 평균적으로.
Darren Cook

1
@PascalCuoq 당신이 벗어날 수 있다면 간단한 해결책이지만 복잡한 문제를 우회하는 것은 잘못된 것이 아닙니다. 재미를 위해 복잡한 알고리즘을 구축하는 것도 문제가되지 않지만, 최소한 간단한 해결책은 언급 할 가치가 있습니다.
David

1

음, 잠재적으로 많은 일이 관련 될 수 있습니다.

  1. 모두가 말했듯이, 개별 문자의 빈도;
  2. 단어의 길이는 확실히 계산되어야하지만 선형적인 방식은 아닙니다. 긴 단어는 문자를 무작위로 추측 할 수 있지만 짧은 단어는 얻기 어려울 수 있습니다.
  3. 또한 단어 자체를 고려해야합니다. "bipartite"는 SO에있는 사람들을위한 단어 일 수 있지만 기술적 인 사람들이 아닌 사람들을위한 단어 일 수 있습니다.

실제로 몇 가지 전략을 함께 발전시킬 수 있습니다. 그 중 절반은 단어의 가치를 결정하기위한 것이고 나머지 절반은 게임에서 이기기 위해 노력하는 것입니다. 후자의 그룹은 점수를 최대화하고 첫 번째 그룹은 점수를 최소화하려고합니다. 잠시 후 패턴이있을 수 있고 단어의 가치를 결정하는 절반은 몇 가지 기준을 제공 할 수 있습니다.


단어 사용 빈도가 좋은 점입니다. "공융"이 "쉬운"단어라고 주장하는 빈도별로 고유 한 문자를 채점 한 것에 기반한 나의 첫 번째 시도. Google ngrams storage.googleapis.com/books/ngrams/books/datasetsv2.html 은 오늘날 일반적으로 사용되는 단어를 식별하는 데 도움이 될 것 같습니다.
grrussel 2013

1

단어 목록으로 시작하고 각 단어에 대해 Google 검색을 시작하십시오. The number of Hits를 용어 난이도의 (거친) 프록시로 사용합니다.

정제 된 버전에서는 동의어 사전 기반 관계로 단어를 그룹화하고 Google 검색 결과를 계산하여 카테고리에서 가장 어려운 단어를 결정합니다.

n-Grams의 개념 취하기 한 단계 더 나아가 단어의 난이도는 산문의 음절 빈도에 따라 평가 될 수 있습니다. 물론 음절 통계의 질에 달려 있습니다. 아마도 Lexemes와 Function 단어 (결정자, 접속사 등)를 구별하고 단어의 음절 수로 정규화해야 할 것입니다 (I Write처럼 Overkill과 같은 느낌 ...).


0

사용자에 따라 학습하고 변화하는 알고리즘을 만드는 아이디어가 마음에 듭니다. 처음에는 목록을 작성하기 위해 제안 된 알고리즘을 구현할 수 있으며, 더 많은 사람들이 게임을할수록 추측 수에 따라 각 단어에 가중치를 할당합니다 (계속해서 추적 및 계산됩니다. ). 이것은 복잡하지만 인기있는 단어가 어려운 평가를 받지만 사람들에게 잘 알려진 문제를 방지합니다.


0

스크래블 포인트에서 단어의 각 문자 값을 계산합니다 : E = 1, D = 2, V = 4, X = 8 등. 그것들을 더하고 글자 수로 나누어 평균 글자 값을 구하고 그것을 사용하여 단어의 점수를 매 깁니다. 큰 사전에있는 각 단어의 평균을 계산하고 사 분위수 사이의 중단 점을 결정합니다. 가장 낮은 사 분위수 "쉬움", 두 중간 사 분위수 "중간"의 단어, 가장 높은 사 분위수 "하드"의 단어를 호출합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.