본문으로 건너뛰기

문장

randSentence는 주어와 서술어를 갖춘 완결된 문장을 만듭니다. 이 페이지는 생성기가 무엇을 어디에 세울지 정하는 방식을 설명합니다. 옵션 하나하나는 레퍼런스 페이지에 있습니다.

동사가 정하는 단어 조합

한 문장의 단어를 묶어 주는 것은 동사입니다. 모든 동사는 어떤 종류의 명사가 그 행위를 할 수 있는지, 타동사라면 무엇에 할 수 있는지를 밝혀 두고, 명사는 거기서만 뽑습니다.

그래서 여우가 사과를 먹는다는 생성기가 만들 수 있는 문장이고 여우가 철학을 먹는다는 아닙니다. 먹는다는 먹을 수 있는 것만 받기 때문입니다.

이를 위해 명사에 따로 붙인 표시는 없습니다. 29개 테마가 이미 그 단어가 무엇인지 알려 주므로, 테마마다 명사 부류를 하나씩 대응시킵니다. 모든 언어가 같은 대응을 씁니다.

부류테마
creatureanimal, myth
personjob, person
plantplant
ediblefood, drink
thingobject, tool, clothing, product, gem, music, toy, furniture
vehiclevehicle
placeplace, nature, space
eventweather, sport, time, sound
ideaconcept, emotion, finance, tech, color
bodybody

creatureperson을 받는 동사는 사자도 자물쇠공도 할 수 있고, 그 밖의 것은 할 수 없습니다. 결과가 빈칸을 채운 틀이 아니라 문장으로 읽히는 것은 이 규칙 하나 덕분입니다.

부류가 너무 넓은 곳에서는 동사 그룹이 앞뒤를 테마로 좁힙니다. 먹는다food를, 마신다drink를 받고, 익는다food가, 울린다music이 하는 일입니다. 부류만 보면 국과 노래는 각각 ediblething이라 구별이 없기 때문입니다. 한 그룹에서 빠진 테마는 같은 분야의 다른 그룹이 반드시 받으므로 동사를 잃는 테마는 없습니다. 노래는 흔들리기를 그만두고 울리기 시작했을 뿐입니다.

테마 아래에서는 명사에 표시를 붙입니다. 언어는 자기 명사 가운데 나는 것, 헤엄치는 것, 기는 것을 적어 두고, 동사는 그중 하나를 요구하거나 배제합니다. 날아오른다는 나는 것만, 헤엄친다는 헤엄치는 것만 받고, 달린다는 헤엄치지도 기지도 않는 것을 받습니다. 그래서 참새는 날아오르고, 고등어는 헤엄치고, 뱀은 기어가고, 어디에도 적히지 않은 사자는 달립니다. 목록은 언어마다 있어서 the heron flew, der Basilisk kriecht, el sapo nada도 같은 규칙으로 나옵니다. 목록에는 예외만 적으며, 모든 명사는 자기 부류가 가진 모든 분야에서 동사를 하나는 갖습니다. 표시 하나는 모든 것을 빼앗습니다. 생물 테마에 든 무생물, 곧 주문이나 부적이나 마력lifeless여서 어떤 동사도 상태도 받지 않으므로, 신화 이야기는 용과 요정의 이야기이지 마력이 브랜디를 움켜쥐고가 되지 않습니다. 또 하나는 장소에서 뺍니다. 장소 부류에 든 장소 아닌 말, 곧 파도나 혜성이나 광년은 placeless여서, 문장은 숲이나 달에서 벌어지지 광년에서 벌어지지 않습니다. 동사는 목적어에도 같은 것을 물을 수 있습니다. 영어에서 sipsliquid를, roastsslicesraw를 요구하고 chewsliquid를 배제하므로, 카레는 끓이고 스테이크는 굽고, 시럽을 씹는 일은 없습니다.

장소는 자기에게 맞는 전치사를 씁니다. 영어의 장소 형태는 모두 in을 쓰는데, 언어는 그 말이 틀리는 곳을 적어 둘 수 있습니다. on the balcony, at the market, under the sky처럼 됩니다. 어디에도 적히지 않은 장소는 형태의 전치사를 그대로 씁니다.

그렇다고 모든 문장이 그럴듯한 말이 되지는 않습니다. 여기서 사자는 푸딩을 구울 수 있고 오카리나는 해질녘에 반짝일 수 있습니다. 부류가 막는 것은 애초에 뜻이 통하지 않는 조합입니다.

언어마다 다른 문장 형태

각 언어는 자기 문법이 허용하는 형태를 자기 어순으로 적어 두고, 구마다 필요한 조사나 전치사도 함께 적습니다. 한국어는 동사로 끝나고, 영어는 동사를 두 번째에 두며, 중국어는 행위의 배경을 동사 앞에 둡니다.

언어문장
한국어검은 고양이가 숲에서 잠잔다.
일본어ハンバーガーが暗礁で冷める。
중국어巨乌贼又品尝朱红椰汁。
영어The angler cleans the towel in the ivory balcony.
독일어Im Frühling blüht eine Chrysantheme noch.

여기서 두 가지가 따라옵니다.

첫째, 언어는 자기가 올바르게 쓸 수 있는 형태만 선언합니다. 독일어에는 목적어가 있는 형태가, 러시아어에는 장소가 있는 형태가 없습니다. 둘 다 명사의 어미가 바뀌는 격을 요구하는데 단어 풀은 형태를 하나씩만 담기 때문입니다. 어느 쪽도 답할 수 없는 요청은 그 언어가 가진 가장 가까운 형태로 처리되고, language를 지정하지 않으면 답할 수 있는 언어가 먼저 뽑힙니다.

둘째, 조사는 문장이 아니라 구에 붙습니다. 한국어는 앞말의 받침에 따라 를 고르므로 조사를 두 벌 저장하지 않아도 사자가사슴이가 제대로 나옵니다. 이탈리아어는 뒤따르는 명사의 첫소리에 따라 l', lo, il을 고릅니다. 독일어는 동사가 두 번째에 서므로 시간으로 시작하는 형태는 주어를 그 뒤에 놓습니다. Am Morgen schläft ein Wolf.처럼 씁니다.

길이와 형태 선택

minLengthmaxLength는 문장 부호까지 포함한 문장 전체를 제한합니다. 범위 안에 들어올 수 없는 형태가 먼저 빠지고, 각 구는 뒤에 오는 구가 최소한의 자리를 확보하고 남은 만큼에서 뽑힙니다.

그래서 좁은 범위는 단어를 자르는 대신 수식어를 빼고, 넓은 범위는 수식어를 되돌립니다. 아무 제한 없이 그 언어가 만들 수 있는 범위는 sentenceLengthRange가 알려 줍니다.

shape는 같은 일을 더 큰 단위로 합니다. 글자 수가 아니라 구의 개수를 정하며, 짧은 문장과 긴 문장이라고 할 때 보통 뜻하는 쪽이 이것입니다.

realism의 적용 범위

realism은 단어가 어디서 오는지만 정합니다. 'invented'는 명사와 수식어를 그 언어의 소리로 지어내고, 그 주위의 문법은 그대로 둡니다. 조사도 관사도 일치도 형태도 모두 그 언어의 것입니다.

그래서 수줍은 노오가 안개 파저멜을 챙긴다.의 어휘는 한국어가 아니지만 문법은 한국어입니다.

문단이 따르는 이야기

여러 문장짜리 결과는 이야기를 따르고, 이야기는 단계의 목록입니다. 각 단계는 주인공이 무엇을 하는지 또는 어떤 상태인지, 그리고 그 전에 무엇이 성립해야 하는지를 적어 둡니다. eat은 주인공이 무언가를 들고 있어야 하고, go는 깨어 있어야 하며 그 뒤에 집을 떠난 상태가 되고, arrive는 다시 집으로 데려옵니다. 플래너가 이 조건에 맞춰 단계를 걸어가며, 이야기에 꼭 필요한 단계는 남기고, 남은 문장은 선택 단계로 채우고, 앞과 어긋나는 단계는 뺍니다.

그래서 여우가 시장으로 갔다. 사과를 샀다. 집에 들어와서 사과를 먹었다.는 생성기가 들려줄 수 있는 이야기이고 여우가 사과를 먹었다. 사과를 샀다.는 아닙니다. 아직 구하지 않은 것을 먹는 사람은 없기 때문입니다.

단계가 문장이 아니라 단계이기에 따라오는 것이 셋 있습니다. 각 문장의 동사는 단계가 지정한 분야(buy, eat, arrive)에서 뽑으므로 문장은 단계가 말하는 바를 말합니다. 단계가 꺼낸 명사, 곧 물건과 장소는 그 뒤의 모든 단계에 그대로 박힙니다. 그리고 이웃한 두 단계는 범위에 여유가 있으면 그 언어가 두 절을 잇는 방식으로 한 문장이 됩니다.

이야기의 종류는 randSentence에 있고, 같은 페이지의 tense가 이야기를 어느 시제로 쓸지 정합니다.

닉네임과의 차이

randNickname은 단어를 나란히 놓기만 하고, 문장은 그중 하나에 대해 무언가를 말합니다. 차이는 세 가지입니다.

  • 닉네임은 일부러 단어를 붙여 씁니다(멋진사자). 문장은 그 언어가 쓰는 대로 띄어 씁니다.
  • 닉네임에는 동사가 없어 무엇과도 일치할 필요가 없습니다. 문장의 서술어는 일치해야 합니다.
  • randNickname에는 wordSeparator가 있습니다. 닉네임은 사람이 직접 입력하는 문자열이기 때문입니다. 문장에는 없습니다. 띄어쓰기는 언어가 정합니다.

두 생성기가 공유하는 것은 단어 풀뿐입니다.

함께 보기

Released under the MIT License